Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列可以具有的最大检查约束数是多少?_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

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

Sql 列可以具有的最大检查约束数是多少?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我正在使用SQL Server 2012 我想知道一个列可以具有的最大检查约束数是多少 我试着在线搜索,但找不到我认为你做得很好,因为数据库范围内的对象(包括约束)的最大数量是。列/表上似乎没有最大数量的检查约束 Technet: 数据库对象包括表、视图、存储过程、用户定义函数、触发器、规则、默认值和约束等对象。数据库中所有对象的总数不能超过2147483647 我想说1,因为您只能通过将列检查约束声明为与列定义的其余部分内联来获得该约束,并且您不能在该点声明多个这样的约束 create tab

我正在使用SQL Server 2012

我想知道一个列可以具有的最大检查约束数是多少


我试着在线搜索,但找不到

我认为你做得很好,因为数据库范围内的对象(包括约束)的最大数量是。列/表上似乎没有最大数量的检查约束

Technet:

数据库对象包括表、视图、存储过程、用户定义函数、触发器、规则、默认值和约束等对象。数据库中所有对象的总数不能超过2147483647


我想说1,因为您只能通过将列检查约束声明为与列定义的其余部分内联来获得该约束,并且您不能在该点声明多个这样的约束

create table T (ID int not null CHECK (ID > 10) CHECK (ID < 99))
创建表T(ID int非空检查(ID>10)检查(ID<99))
生成结果:

Msg 8148,16级,状态0,第1行

为列“ID”、表“T”指定了多个列检查约束

但是,您可以根据需要声明任意多的表约束,直到前面提到的理论限制。但就像很多事情一样,如果你不得不问一个极限,你可能做错了什么。也就是说,大约在你写关于一个专栏的第50个限制的时候,你不应该问自己为什么你有这么多


好的,这个答案显然引起了一些混乱。归根结底,列检查约束和表检查约束之间并没有太多区别,它们只是碰巧提到了一个列。我想指出的是,这个系统似乎确实能区分它们。这是否真的能达到任何效率(例如,如果查询中没有提到列检查约束,则不需要考虑列检查约束),我无法确定

但是SQLServer坚持表中每列最多只有一个单列检查约束,并在其目录中公开这些信息。例如,在中,它公开了
父列\u id
,该列被描述为

0表示表级检查约束

非零值表示这是在具有指定ID值的列上定义的列级检查约束


您计划创建多少个?Microsoft建议每列不超过253个外键约束,尽管您仅受数据库中对象数(2147483647)的限制。我认为每个表的检查约束也是如此。你应该被限制在每列一个检查常量。是的,如果我按你的方式,它会抛出错误。然而,我只是尝试了以下方法:创建表S(ID int notnull CHECK(ID>10),CHECK(ID<99)),它可以工作。您需要在检查约束之间使用逗号。否。我甚至试着给出一个命名检查约束。如下所示:创建表A(ID int not null constraint ck3 CHECK(ID>10)、constraint ck4 CHECK(ID<99)),但同样,您将创建表约束作为第二个约束,而不是列约束。示例中的第二个约束是附加到表的约束,而不是附加到
ID
列。如果您的问题是一列可以有多少约束,那么答案是
1
。如果您的问题是有多少表约束可以提及特定列,那么答案是您想要的。好的,但是第二个约束仍然确保我的值是否为,它是否会被描述为表约束,因为它在create table语句中作为单独的“实体”引入。在那个逗号之后,您可以继续声明另一列,或任何其他类型的表级约束,例如PK或FK,以及通过引入检查约束所做的事情。