列可以具有的最大检查约束数是多少?

时间:2014-04-28 06:53:34

标签: sql sql-server sql-server-2012

我正在使用SQL Server 2012

我想知道列可以拥有的最大检查约束数是多少?

我尝试在线搜索,但无法找到

2 个答案:

答案 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。