首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中跨多個列強制執行唯一約束?

如何在 SQL Server 中跨多個列強制執行唯一約束?

DDD
發布: 2025-01-24 23:51:11
原創
389 人瀏覽過

How to Enforce a Unique Constraint Across Multiple Columns in SQL Server?

在多個 SQL Server 欄位之間強制唯一性

通常,資料庫完整性需要防止基於多個列值的重複行。本文示範如何在 PersonNumber 表中的 ActivePerson 欄位之間強制執行唯一限制。

實現唯一約束

刪除任何預先存在的重複條目後,使用以下方法之一套用約束:

  • 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>
登入後複製

這可確保 PersonNumberActive 狀態的每個唯一組合僅存在一筆記錄。 任何插入重複項的嘗試都會導致錯誤。 請記得將 dbo.Person 替換為您的實際架構和表格名稱。

以上是如何在 SQL Server 中跨多個列強制執行唯一約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板