gpt4 book ai didi

tsql - 创建表时声明默认约束

转载 作者:行者123 更新时间:2023-12-01 23:10:58 25 4
gpt4 key购买 nike

我正在通过编写代码而不是使用 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 生成一个随机名称,我不“喜欢”它。

当我尝试声明默认值约束时出现了问题:查看 Internet 上的信息以及 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'. .

另外,如果我创建表然后 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默认开启。

关于tsql - 创建表时声明默认约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1782714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com