创build表时声明一个默认约束
我正在通过编写代码而不是使用GUI在Microsoft SQL Server 2000中创build一个新表,我正试图学习如何做到“手动方式”。
这是我实际使用的代码,它工作正常:
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如何创build它,我明白它可以以内联方式创build:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
要么
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
内联方法可以正常工作,但是它像平常一样为常量生成一个随机名称,独立方法会引发一个错误,并Incorrect syntax near 'FOR'.
声明Incorrect syntax near 'FOR'.
。
另外,如果我创build表,然后改变它,命令的作品:
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展示了如何使用内联语法来添加一个命名的默认约束,我仍然在研究独立语法是完全错误的还是我的错。
与列创build内联:
[load_date] SMALLDATETIME NOT NULL CONSTRAINT [df_load_date] DEFAULT GETDATE()
我已经使用方括号而不是引号,因为许多读者在默认情况下不会使用QUOTED_IDENTIFIERS
。