Я створюю нову таблицю на сервері Microsoft SQL 2000, записуючи код замість GUI, я намагаюся навчитися робити це "вручну".
Це код, який я фактично використовую, і він прекрасно працює:
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"
)
Я тут повністю втрачений, це те, що я намагаюся зробити, не можливо, або я щось роблю не так?
Редагувати:
Девід М показав, як додати іменоване обмеження за замовчуванням, використовуючи вбудований синтаксис, я все ще шукаю, щоб зрозуміти, чи є окремий синтаксис повністю неправильним чи це моя вина.