syntax for creating table types 限制性更强 - 它不支持命名约束,与 CREATE TABLE 相比还有一些其他差异。
CREATE TYPE dbo.dealerDisable AS TABLE -- ALWAYS use schema!
(
id int not null,
dealerNo varchar(10) not null,
dealerName varchar(50),
disabling varchar(5) check (disabling in ('Rates','All')),
dateAdded date
);
当您尝试插入一个值时,您可以看到系统必须为表的每个实例创建一个唯一的约束名称:
DECLARE @d dbo.dealerDisable2;
INSERT @d VALUES(1,'blat','foo','None',getdate());
DECLARE @e dbo.dealerDisable2;
INSERT @e VALUES(1,'blat','foo','None',getdate());
错误:
消息 547,级别 16,状态 0
INSERT 语句与 CHECK 约束“CK__#BCAA5D0E__disab__BD9E8147”冲突。
...
消息 547,级别 16,状态 0
INSERT 语句与 CHECK 约束“CK__#AAF87C65__disab__ABECA09E”冲突。
...
如果您考虑一下这背后的机制,那是有道理的。对于一些类型的约束,你在数据库中只能有一个同名的约束。这将产生相同类型的错误,例如:
CREATE TABLE #a(id int, CONSTRAINT PK1 PRIMARY KEY (id));
CREATE TABLE #b(id int, CONSTRAINT PK1 PRIMARY KEY (id));
现在,虽然您可以拥有任意多个同名的检查约束,但这可能只是对语法的简单简化。