UNIQUE 制約の作成
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance
SQL Server では、SQL Server Management Studio または Transact-SQL を使用して UNIQUE 制約を作成し、主キー以外の特定の列に重複した値が入力されないようにします。 UNIQUE 制約を作成すると、対応する一意なインデックスが自動的に作成されます。
Note
Azure Synapse Analytics での一意制約の詳細については、Azure Synapse Analytics の主キー、外部キー、一意キーに関するページを参照してください。
アクセス許可
テーブルに対する ALTER 権限が必要です。
SQL Server Management Studio (SSMS) の使用
SSMS を使用して一意性制約を作成する方法
オブジェクト エクスプローラーで、UNIQUE 制約を追加するテーブルを右クリックし、[デザイン] を選択します。
[テーブル デザイナー] メニューの [インデックス/キー]を選択します。
[インデックス/キー] ダイアログ ボックスで、[追加] を選択します。
[全般] の下のグリッドで [型] を選択し、プロパティの右側にあるドロップダウン リスト ボックスの [一意キー] を選択し、その後[閉じる] を選択します。
[ファイル] メニューで、[<テーブル名> を保存] を選択します。
Transact-SQL を使用する
Transact-SQL を使用して一意性制約を作成する方法
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] バーで、[新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 次の例では、
TransactionHistoryArchive4
テーブルを作成してTransactionID
列に UNIQUE 制約を作成します。USE AdventureWorks2022; GO CREATE TABLE Production.TransactionHistoryArchive4 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GO
既存のテーブルに一意性制約を作成する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] バーで、[新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 次の例では、
Person.Password
テーブルのPasswordHash
およびPasswordSalt
列に UNIQUE 制約を作成します。USE AdventureWorks2022; GO ALTER TABLE Person.Password ADD CONSTRAINT AK_Password UNIQUE (PasswordHash, PasswordSalt); GO
新しいテーブルに一意性制約を作成する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] バーで、[新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 次の例では、テーブルを作成して
TransactionID
列に UNIQUE 制約を定義します。USE AdventureWorks2022; GO CREATE TABLE Production.TransactionHistoryArchive2 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GO
null 許容列に一意制約を作成する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] バーで、[新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例では、
CREATE UNIQUE INDEX
構文を使用してフィルター処理された一意制約を作成し、NULL
以外の値に対してのみ一意性を適用します。USE AdventureWorks2022; GO CREATE UNIQUE INDEX UQ_AdventureWorksDWBuildVersion ON dbo.AdventureWorksDWBuildVersion (DBVersion) WHERE (DBVersion IS NOT NULL); GO