在 SQL Server 中實作條件唯一約束:無觸發器方法
維護資料完整性通常需要選擇性地應用於資料子集的獨特限制。 雖然觸發器是一種常見的解決方案,但 SQL Server 提供了一種使用過濾索引的更優雅的方法。
利用濾波索引實現條件唯一性
過濾索引僅對資料表的一部分行進行索引,由篩選條件決定。這允許有條件的唯一約束。
考慮只有當 RecordStatus 為 1 時才需要 (ID, RecordStatus) 唯一性的場景。解決方案很簡單:
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
此索引僅索引 RecordStatus = 1
所在的行,從而強制該子集的唯一性。 違反此約束會導致錯誤:
<code>Msg 2601, Level 14, State 1, Line 13 Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
重要考慮因素
過濾索引是在 SQL Server 2008 中引入的。對於早期版本,觸發器或唯一約束和行版本控制技術的組合是必要的替代方案。
以上是如何在不使用觸發器的情況下在 SQL Server 中強制執行條件唯一約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!