我正在使用SQL Server 2012
我想知道列可以拥有的最大检查约束数是多少?
我尝试在线搜索,但无法找到
答案 0 :(得分:5)
我想说1,因为你只通过声明它与列定义的其余部分内联来获得列检查约束,并且你不能在那时声明多个这样的约束。
create table T (ID int not null CHECK (ID > 10) CHECK (ID < 99))
产生结果:
Msg 8148,Level 16,State 0,Line 1
为列&#39; ID&#39;,表&#39; T&#39;指定了多个列CHECK约束。
但是,您可以根据需要声明任意数量的表约束,直到Patrick's Answer提到的理论限制。但与许多事情一样,如果你必须询问有关限制,你可能会做错事。即关于你在一栏中写下你的第50个约束的时间,你不应该问自己为什么你有这么多?
好的,这个答案显然引起了一些混乱。在一天结束时,没有太多可以区分列检查约束和仅仅提到单个列的表检查约束。我要指出的是,系统似乎确实在它们之间作了区分。这实际上是否实现了效率(例如,如果在查询中未提及它们适用的列,则无需考虑列检查约束),我无法肯定地说。
但SQL Server坚持表中每列只有一个列检查约束最多,并在其目录中公开此信息。例如,在sys.check_constraints
中,它会公开parent_column_id
,其描述为
0表示表级CHECK约束。
非零值表示这是在具有指定ID值的列上定义的列级CHECK约束。
答案 1 :(得分:2)
我认为你很好,因为对象的最大数量,包括约束,数据库范围是2,147,483,647。对于列/表,似乎不是最大数量的检查约束。
的Technet:
数据库对象包括诸如表,视图,存储过程,用户定义函数,触发器,规则,默认值和约束之类的对象。数据库中所有对象的总和不能超过2,147,483,647。