【发布时间】:2015-07-29 20:56:15
【问题描述】:
对于每个表约束,我看到有 shorthand 形式,semi-shorthand 形式和 full 形式(请原谅我的命名. 欢迎提出正确称呼方式的建议)
例如
简写形式:让约束名由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 中看到了一个完整的用法,即here
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' 附近的语法不正确。
谁能建议为什么会发生这个错误以及如何使用默认约束的完整形式定义?
【问题讨论】:
标签: sql-server constraints default default-constraint