在 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中文網其他相關文章!