我正在通过编写代码而不是使用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