Объявление ограничения по умолчанию при создании таблицы
Я создаю новую таблицу в Microsoft SQL Server 2000, написав код вместо использования графического интерфейса, я пытаюсь научиться делать это «вручную».
Это код, который я на самом деле использую, и он отлично работает:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
Я сам указал первичный ключ, внешний ключ и проверочные ограничения, потому что таким образом я могу определить для них имя, в противном случае объявление их встроенным приведет к тому, что SQL Server сгенерирует случайное имя, и оно мне «не понравится».
Проблема возникла, когда я попытался объявить ограничение значения по умолчанию: глядя на информацию в Интернете и на то, как Microsoft SLQ Server Management Studio ее создает, я понял, что она может быть создана как внутри, так и самостоятельно:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
или же
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Встроенный метод работает нормально, но, как обычно, генерирует случайное имя для константы, автономный метод выдает ошибку, говоряIncorrect syntax near 'FOR'.
.
Кроме того, если я создаю таблицу, а затемALTER
это, команда работает:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
В качестве ссылки, вот полный код, который я пытаюсь выполнить:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)
Я в полном недоумении, то, что я пытаюсь сделать, невозможно, или я делаю что-то не так?
Редактировать:
Дэвид М показал, как добавить именованное ограничение по умолчанию, используя встроенный синтаксис, я все еще пытаюсь понять, является ли автономный синтаксис полностью неправильным или это моя ошибка.