分享方式:


建立唯一的條件約束

適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體

您可以使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 中建立 Unique 條件約束,確保在沒有參與主索引鍵之特定資料行中輸入的值不會重複。 建立唯一條件約束會自動建立對應的唯一索引。

注意

如需 Azure Synapse Analytics 中 Unique 條件約束的詳細資訊,請參閱 Azure Synapse Analytics 中的主索引鍵、外部索引鍵和唯一索引鍵

權限

需要資料表的 ALTER 權限。

使用 SQL Server Management Studio (SSMS)

使用 SSMS 建立 Unique 條件約束

  1. 物件總管中,以滑鼠右鍵按一下要加入唯一條件約束的資料表,然後選取 [設計]。

  2. 在 [資料表設計工具] 功能表中,選取 [索引/索引鍵]

  3. 在 [索引/索引鍵] 對話方塊中,選取 [加入]。

  4. 在 [一般] 底下的方格中,選取 [類型],從屬性右邊的下拉式清單方塊中選擇 [唯一索引鍵],然後選取 [關閉]

  5. 在 [檔案] 功能表上,選取 [儲存 資料表名稱]。

使用 Transact-SQL

使用 Transact-SQL 建立 Unique 條件約束

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在 [標準] 列上,選取 [新增查詢]

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會建立 TransactionHistoryArchive4 資料表並且在 TransactionID資料行上建立唯一條件約束。

    USE AdventureWorks2022;  
    GO  
    CREATE TABLE Production.TransactionHistoryArchive4  
     (  
       TransactionID int NOT NULL,   
       CONSTRAINT AK_TransactionID UNIQUE(TransactionID)   
    );   
    GO  
    

在現有的資料表上建立 Unique 條件約束

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在 [標準] 列上,選取 [新增查詢]

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會在 PasswordHash 資料表中的 PasswordSaltPerson.Password資料行上建立唯一條件約束。

    USE AdventureWorks2022;   
    GO  
    ALTER TABLE Person.Password   
    ADD CONSTRAINT AK_Password UNIQUE (PasswordHash, PasswordSalt);   
    GO  
    
    

在新的資料表中建立 Unique 條件約束

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在 [標準] 列上,選取 [新增查詢]

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會建立資料表並且在 TransactionID資料行上定義唯一條件約束。

    USE AdventureWorks2022;  
    GO  
    CREATE TABLE Production.TransactionHistoryArchive2  
    (  
       TransactionID int NOT NULL,  
       CONSTRAINT AK_TransactionID UNIQUE(TransactionID)  
    );  
    GO  
    

在可為 Null 的資料行上建立 Unique 條件約束

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在 [標準] 列上,選取 [新增查詢]

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會使用 CREATE UNIQUE INDEX 語法建立篩選的 Unique 條件約束,只對非 NULL 值強制執行唯一性。

    USE AdventureWorks2022;  
    GO
    CREATE UNIQUE INDEX UQ_AdventureWorksDWBuildVersion
    ON dbo.AdventureWorksDWBuildVersion (DBVersion)
    WHERE (DBVersion IS NOT NULL);
    GO