web-dev-qa-db-ja.com

SQL Server 2008 R2のテーブル全体で列を強制的に一意にするにはどうすればよいですか?

Descriptionフィールドを持つテーブルがあります。 2つの行に同じ「説明」がないことを確認したいのですが、説明をID列に入れることができません(ID列はintです)。

Descriptionを(すでに主キーである私のIDに加えて)2番目の主キーとして設定しても安全ですか?

18
Giffyguy

[説明]列に一意のインデックスを追加します。

Sql Server Management Studioを使用して、テーブルを右クリックし、[デザイン]を選択します。次に、列を右クリックして「インデックス/キー」を選択します。次のウィンドウが表示されます

alt text

左下の[追加]をクリックして、インデックスのプロパティを指定します。 DDLスクリプトを使用する場合は、次のようなものを使用してください

CREATE UNIQUE NONCLUSTERED INDEX [IX_INDEXNAME] ON [dbo].[TABLENAME] 
(
    [Description] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO
15
Lorenzo

「二次主キー」のようなものはありません。テーブルごとに1つの主キーがあります。

Description列に NIQUE制約 を作成します(非常に珍しいことですが、ところで。たとえば、Product Nameに一意のインデックスを作成するのが一般的です。 Product description)またはDescription列にnull値がある場合は、 フィルター処理されたインデックス (SQL Server 2008以降)を作成します。

ALTER TABLE dbo.yourTable
   ADD CONSTRAINT UQ_yourTable_Description UNIQUE ([Description]);
23
Mitch Wheat

必要に応じて、SSMSGUIを使用してこれを行う別の方法があります。

例のために、Description列をMyUniqueColumnという名前に置き換えました。

  1. SSMSソリューションエクスプローラーのテーブルの下にある[インデックス]を右クリックし、[新しいインデックス...]をクリックします(インデックスではなく制約を作成しようとしていることはわかっていますが、これはまさにADD CONSTRAINTSQLスクリプトはそうします。

enter image description here

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

enter image description here

  1. 次のウィンドウで列を確認してください

enter image description here

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