Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 SERVER检查约束-查询其他行_Sql_Sql Server 2005_Sql Server 2008 - Fatal编程技术网

SQL SERVER检查约束-查询其他行

SQL SERVER检查约束-查询其他行,sql,sql-server-2005,sql-server-2008,Sql,Sql Server 2005,Sql Server 2008,我想在我的数据库表上强制执行一条业务规则,以确保如果表中已经包含符合特定条件的行,则无法插入该行 想要使用检查约束,但怀疑这可能必须通过触发器完成 有没有办法通过检查约束来实现这一点?或者,是否有其他方法可以在数据库级别执行此操作而不使用触发器?根据您的特定条件(您尚未共享),您可以执行以下操作: 这通常比函数或其他解决方法更快 一般格式为: CREATE UNIQUE NONCLUSTERED INDEX ix_IndexName ON MyTable (FieldstoIndex) WHER

我想在我的数据库表上强制执行一条业务规则,以确保如果表中已经包含符合特定条件的行,则无法插入该行

想要使用检查约束,但怀疑这可能必须通过触发器完成


有没有办法通过检查约束来实现这一点?或者,是否有其他方法可以在数据库级别执行此操作而不使用触发器?

根据您的特定条件(您尚未共享),您可以执行以下操作:

这通常比函数或其他解决方法更快

一般格式为:

CREATE UNIQUE NONCLUSTERED INDEX ix_IndexName ON MyTable (FieldstoIndex)
WHERE <filter to only include certain rows>

在MyTable(FieldstoIndex)上创建唯一的非聚集索引ix_IndexName
哪里

请提供一个具体示例,说明您正在尝试做什么。始终最好尝试以声明方式执行此操作。您能更具体地说明您测试的条件吗?如果某个范围内存在id列的现有行,我不想插入行。通过标量值函数和检查,这是可能的constraint@AJM-性能将很差,很难纠正,因此适用于所有情况(并发、多行插入、快照隔离),谢谢。我想这能满足我的需要。我有一个用户id和一个状态id,并希望确保具有特定状态id的用户只能有一行,例如,在MyTable上创建唯一的非聚集索引ix_IndexName(用户id,状态id)其中StatusId=X@AJM实际上,听起来您只需要使用唯一索引,而过滤器可能是多余的。不过,还有其他状态可以有多个条目