Я создаю новую таблицу на сервере Microsoft SQL 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"
Встроенный метод работает отлично, но он генерирует как обычно случайное имя для constaint, автономный метод выдает ошибку, говоря 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"
)
Я полностью в проигрыше здесь, это то, что я пытаюсь сделать невозможным, или я делаю что-то неправильно?
Edit:
Дэвид М показал, как добавить именованное ограничение по умолчанию, используя встроенный синтаксис, я все еще хочу понять, является ли одиночный синтаксис полностью неправильным или это моя ошибка.