tsql – 在创建表时声明默认约束

我在Microsoft SQL Server 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"

内联方法工作正常,但它生成一个随机名称的constaint,独立的方法抛出一个错误,说’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。

http://stackoverflow.com/questions/1782714/declaring-a-default-constraint-when-creating-a-table

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:tsql – 在创建表时声明默认约束