创建表时声明默认约束
我正在通过编写代码而不是使用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生成一个随机名称,我不喜欢它。
当我试图声明默认值约束时,问题就出现了:查看互联网上的信息以及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'.
说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展示了如何使用内联语法添加一个命名的默认约束,我仍然期待理解独立语法是完全错误的还是我的错。
与列创建内联:
[load_date] SMALLDATETIME NOT NULL
CONSTRAINT [df_load_date] DEFAULT GETDATE()
我已经使用方括号而不是引号,因为许多读者默认不会使用QUOTED_IDENTIFIERS
。
上一篇: Declaring a default constraint when creating a table
下一篇: How do I generate random number for each row in a TSQL Select?