共用方式為


建立唯一的條件約束

適用於: SQL Server 2016 (13.x)和更新版本,Azure SQL DatabaseAzure SQL 受控實例Microsoft Fabric 中的 SQL 資料庫

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

注意

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

權限

需要該資料表的 ALTER 權限。

使用 SQL Server Management Studio (SSMS)

使用 SSMS 建立唯一約束

  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  
    

在現有的資料表上建立唯一性約束條件

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

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

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

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

在新資料表中建立唯一約束

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

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

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

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

在可為 Null 的資料行上建立唯一約束

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

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

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

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