web-dev-qa-db-ja.com

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

SQL Server 2008 R2があり、一意の列を設定したい。

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

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

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

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

90
White Island

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

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

50
Martin Smith

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.
105
Eric Leschinski

オブジェクトエクスプローラーで(制約ではなく)インデックスを通過する場合でも、スクリプトが行うことを正確に行うGUIの別の方法を次に示します。

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

enter image description here

  1. 新しいインデックスに名前(「U_Name」)を付け、「ユニーク」にチェックマークを付けて、「追加...」をクリックします。

enter image description here

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

enter image description here

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

明確にカバーされていないことの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

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

8
detzu