对于每个表约束,我看到有速记形式,半速记形式和完整形式(请原谅我的命名。欢迎提出如何正确调用它们的建议)
例如
简写形式:让约束名称由 SQL Server 定义,要影响的列隐含为正在定义的列
CREATE TABLE myTable
(
id int PRIMARY KEY,
)
半速记形式:显式约束名,隐含列
id int CONSTRAINT PK_ID PRIMARY KEY,
完整形式:两者都是明确的。允许定义与列定义分开
id int,
Name varchar(40),
CONSTRAINT PK_ID PRIMARY KEY(id)
据我所见,完整的形式经常出现在 中ALTER TABLE
,其中约束是在之后定义的。
对于DEFAULT
约束
速记形式
id int DEFAULT newid()
半速记形式
id int CONSTRAINT DF_ID DEFAULT newid()
ALTER TABLE
我在这里看到了完整的用法
ALTER TABLE [dbo].[Customers] WITH NOCHECK ADD
CONSTRAINT [DF__Customers__cust___151B244E]
DEFAULT ('new customer') FOR [cust_name],
CONSTRAINT [def_last_updated_by] DEFAULT
(suser_sname()) FOR [last_updated_by],
PRIMARY KEY CLUSTERED
([cust_id]) ON [PRIMARY]
GO
但是,创建表时的全格式定义失败
CREATE TABLE testGUIDs
(
ID uniqueidentifier,
Name varchar(40),
CONSTRAINT DF_ID DEFAULT newid() FOR [ID]
)
GO
有错误
消息 102,级别 15,状态 1,第 5 行 'for' 附近的语法不正确。
谁能建议为什么会发生此错误以及如何使用默认约束的完整形式定义?