Ani*_*dhe 2 sql sql-server sql-server-2012
我正在研究SQL Server 2012
我想知道列可以拥有的最大检查约束数是多少?
我尝试在线搜索,但找不到
我会说1,因为你只通过声明它与列定义的其余部分内联来获得列检查约束,并且你不能在那时声明多个这样的约束.
create table T (ID int not null CHECK (ID > 10) CHECK (ID < 99))
Run Code Online (Sandbox Code Playgroud)
产生结果:
Msg 8148,Level 16,State 0,Line 1
为列'ID',表'T'指定了多个列CHECK约束.
但是,您可以根据需要声明尽可能多的表约束,直到Patrick's Answer提到的理论极限.但与许多事情一样,如果你不得不问一个限制,你可能做错了什么.即将你写下关于一列的第50个约束的时间,你不应该问自己为什么你有这么多?
好的,这个答案显然引起了一些混乱.在一天结束时,没有太多区分列检查约束和表检查约束,恰好只提到一个列.我想指出的是,系统似乎确实在它们之间作出了区分.实际上是否实现了任何效率(例如,如果查询中未提及它们适用的列,则无需考虑列检查约束)我无法确定.
但SQL Server坚持认为表中每列最多只有一个列检查约束,并在其目录中公开此信息.例如,在sys.check_constraints,它暴露了parent_column_id被描述为
0表示表级CHECK约束.
非零值表示这是在具有指定ID值的列上定义的列级CHECK约束.