我正在通過編寫代碼而不是使用GUI創建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生成一個隨機的名稱,我不喜歡它。
的問題出現了,當我試圖聲明默認值約束:在網上尋找和微軟如何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"
)
我完全失去了這裏,是我想不可能的,或者我做錯了什麼?
編輯:
大衛中號展示瞭如何使用內聯語法來添加一個名爲默認約束,我仍然希望瞭解,如果獨立的語法是完全錯誤的,或者是我的錯。
我同意編輯。 David M的迴應並不包括如何通過獨立約束聲明添加約束,但由於BOL沒有任何示例可以通過David M演示的方式命名默認約束*,所以我認爲這是安全的假設SQL Server(不一致)不支持此語法。 – 2011-09-30 17:06:22
另請參閱:[SQL Server]附近的語法不正確(https://stackoverflow.com/questions/42440431/) – paulsm4 2017-08-16 04:00:39