Объявление ограничения по умолчанию при создании таблицы

Я создаю новую таблицу на сервере 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:

Дэвид М показал, как добавить именованное ограничение по умолчанию, используя встроенный синтаксис, я все еще хочу понять, является ли одиночный синтаксис полностью неправильным или это моя ошибка.

Ответ 1

Сделайте это с помощью создания столбца:

[load_date] SMALLDATETIME NOT NULL
        CONSTRAINT [df_load_date] DEFAULT GETDATE()

Я использовал квадратные скобки, а не кавычки, так как многие читатели по умолчанию не будут работать с QUOTED_IDENTIFIERS.