在多個 SQL Server 欄位之間強制唯一性
通常,資料庫完整性需要防止基於多個列值的重複行。本文示範如何在 PersonNumber
表中的 Active
和 Person
欄位之間強制執行唯一限制。
實現唯一約束
刪除任何預先存在的重複條目後,使用以下方法之一套用約束:
ALTER TABLE
語句: 這直接將約束加入現有表。
<code class="language-sql">ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);</code>
CREATE UNIQUE INDEX
語句: 這將建立一個唯一索引,隱式強制執行唯一性限制。
<code class="language-sql">CREATE UNIQUE INDEX uq_Person_NumberActive ON dbo.Person (PersonNumber, Active);</code>
替代方法與最佳化
雖然上述方法有效,但請考慮以下增強功能:
TRY...CATCH
區塊內的異常來提高效能。 INSTEAD OF
觸發器: INSTEAD OF
觸發器允許條件插入邏輯,防止異常傳播到應用程式層。 這提供了更強大的錯誤處理機制。 說明性範例
此範例示範了操作中的唯一限制:
<code class="language-sql">-- Create the Person table CREATE TABLE dbo.Person ( ID INT IDENTITY(1, 1) PRIMARY KEY, Name NVARCHAR(32) NOT NULL, Active BIT NOT NULL DEFAULT 0, PersonNumber INT NOT NULL ); -- Add the unique constraint ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active); -- Insert data INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234); INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('Jane Doe', 0, 5678); -- Attempt to insert a duplicate (this will fail) INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234);</code>
這可確保 PersonNumber
和 Active
狀態的每個唯一組合僅存在一筆記錄。 任何插入重複項的嘗試都會導致錯誤。 請記得將 dbo.Person
替換為您的實際架構和表格名稱。
以上是如何在 SQL Server 中跨多個列強制執行唯一約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!