在 SQL Server 中实现条件唯一约束
SQL Server 的独特约束可防止指定列中出现重复条目。 但是如何仅在特定条件下强制唯一性呢? 解决方案在于利用过滤索引。
根据 SQL Server 文档,过滤索引是一种非聚集索引,仅对由过滤谓词定义的表行子集进行索引。
此功能允许您将唯一索引与条件过滤器结合起来,以选择性地强制唯一性。 考虑一张桌子:
<code class="language-sql">Table(ID, Name, RecordStatus)</code>
其中 RecordStatus
可以是 1(活动)或 2(删除)。为了确保仅当 ID
为 1 时唯一的 RecordStatus
值,您需要创建一个过滤索引:
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
这仅对活动记录(其中 ID
)强制执行 RecordStatus = 1
的唯一性。 尝试使用 ID
插入重复的 RecordStatus = 1
将导致错误:
<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
重要的是要记住,过滤索引是在 SQL Server 2008 中引入的。对于早期版本(如 SQL Server 2005),需要使用触发器等替代方法来实现条件唯一性。
以上是如何在 SQL Server 中强制执行条件唯一性?的详细内容。更多信息请关注PHP中文网其他相关文章!