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实际上,听起来您只需要使用唯一索引,而过滤器可能是多余的。不过,还有其他状态可以有多个条目