列に一意制約を作成するにはどうすればよいですか(SQL Server 2008 R2)?


108

SQL Server 2008 R2を使用しており、一意の列を設定したいと考えています。

これを行うには、「一意のインデックス」と「一意の制約」の2つの方法があるようです。一意の制約が推奨されていますが、インデックスも自動的に取得されるため、私が理解しているものとそれほど変わりません。

一意の制約を作成するにはどうすればよいですか?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

SQL Server Management Studioを使用して一意の制約を作成する方法はありますか?

回答:


59

GUIを介してこれらの制約を作成するには、チェック制約のダイアログではなく、「インデックスとキー」ダイアログが必要です。

しかし、あなたの場合、あなたはすでに持っているコードを実行する必要があるだけです。表現ダイアログに入力する必要はまったくありません。


だから私はそれをクエリで実行できますか?試したところ、問題なく動作しましたが、それを確認できる場所はどこにありますか(つまり、設定がどこで変更されたか)。
ホワイトアイランド

@WhiteIsland-テーブルを展開して[キー]の下を見ると、SSMSオブジェクトエクスプローラーに表示されます
Martin Smith

126

GUIからSQL Serverで列を一意として設定します。

彼らは本当にあなたがGUIでそれをするために納屋の周りを走らせるようにします:

開始する前に、列が一意性制約に違反していないことを確認してください。

  1. SQL Server Management Studioを開きます。
  2. テーブルを右クリックし、[デザイン]をクリックします。
  3. 編集する列を右クリックすると、ポップアップメニューが表示され、[インデックス/キー]をクリックします。
  4. 「追加」ボタンをクリックします。
  5. 「一般」タブを展開します。
  6. 一意にする列が[列]ボックスで選択されていることを確認します。
  7. 「タイプ」ボックスを「一意のキー」に変更します。
  8. 「閉じる」をクリックします。
  9. ファイルウィンドウに小さなアスタリスクが表示されます。これは、変更がまだ保存されていないことを意味します。
  10. [保存]を押すか、Ctrl + sを押します。保存され、列は一意である必要があります。

または、SQLクエリウィンドウから列を一意として設定します。

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

変更はすぐに有効になります。

Command(s) completed successfully.

すごい。また、次のようにTSQLスクリプトに複数の列を追加することもできます。
ジョーダン

15

オブジェクトエクスプローラーで(制約ではなく)インデックスを通過しても、スクリプトが実行するのとまったく同じようにGUIを使用する別の方法を次に示します。

  1. [インデックス]を右クリックし、[新しいインデックス...]をクリックします(注:テーブルをデザインビューで開いている場合、これは無効です)。

ここに画像の説明を入力してください

  1. 新しいインデックスに名前(「U_Name」)を付け、「一意」にチェックを入れ、「追加...」をクリックします

ここに画像の説明を入力してください

  1. 次のウィンドウで「名前」列を選択しますn

ここに画像の説明を入力してください

  1. 両方のウィンドウで[OK]をクリックします

1
SSMS 2014では、新しいインデックスを作成するための右クリックコンテキストメニューオプションは、上記の画面キャプチャとは少し異なります。[新しいインデックス]をクリックするときは、(クラスター化インデックス、非クラスター化インデックス、プライマリXMLインデックス、セカンダリXMLインデックス、空間インデックス、非クラスター化列ストアインデックス、およびクラスター化列ストアインデックス)のリストから選択する必要があります。通常、非クラスター化インデックスを選択します。
iCode

8

明確にカバーされていないことの1つは、Microsoft SQLが追加された制約の一意のインデックスをバックグラウンドで作成していることです。

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

ご覧のとおり、新しい制約と新しいインデックスU_Nameがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.