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


181

SQL Server 2005の既存のテーブルに一意制約を作成するにはどうすればよいですか?

データベースダイアグラムでTSQLとその方法の両方を探しています。

回答:


272

SQLコマンドは次のとおりです。

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

ここで完全な構文を参照してください。

データベースダイアグラムから実行する場合:

  • テーブルを右クリックして、[インデックス/キー]を選択します
  • [追加]ボタンをクリックして、新しいインデックスを追加します
  • 右側のプロパティに必要な情報を入力します。
    • 必要な列(省略記号ボタンをクリックして選択)
    • 「一意」を「はい」に設定します
    • 適切な名前を付けます

1
それは動作します...しかし...制約がCONSTRAINTSフォルダーではなくINDEXフォルダーの下に表示される理由 別のアイコンで表示されますが、いずれにしても制約フォルダーにあるはずです。
Fernando Torres

84

SQL Server Management Studio Expressの場合:

  • テーブルを右クリックして、[変更 ] またはデザイン(以降のバージョンの場合)
  • フィールドを右クリックして選択 インデックス/キー...。
  • クリック 追加を
  • 以下のために、選択したフィールド名を使用すると、ユニークになりたいです。
  • 種類、選択した一意のキーを
  • クリックして閉じる保存テーブルを。


15

警告:一意になるように設定した列には、null行を1つだけ含めることができます。

SQL 2008のフィルターされたインデックスを使用してこれを行うことができます。

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

回答の範囲でNULLない限り、フィールド値は一意でなければならないを参照してください。


SQL Server 2005でこれをどのように行いますか?
Maxrunner

2
SQL Server 2005では実現できません。より最新のRDBMSにアップグレードすることを強くお勧めします。2016
。– reedstonefood


10

また、データベースダイアグラムを使用してこれを実行できることもわかりました。

テーブルを右クリックして[インデックス/キー...]を選択します。

[追加]ボタンをクリックして、列を一意にする列に変更します。

変更は一意に「はい」になります。

[閉じる]をクリックして図を保存すると、テーブルに追加されます。



6

テーブルが既に作成されているときに1つまたは複数の列にUNIQUE制約を作成するには、次のSQLを使用します。

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

上記のクエリのUNIQUE制約の命名を許可するには

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

MySQL / SQL Server / Oracle / MS Accessでサポートされるクエリ。


UNIQUE NONCLUSTEREDオプション PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
Kiquenet 2016年

5

Management Studioのダイアグラムでテーブルを選択し、必要に応じて右クリックして新しい列を追加します。列を右クリックして[制約の確認]を選択すると、制約を追加できます。


0

状況によっては、作成する前に一意のキーが存在しないことを確認することが望ましい場合があります。このような場合、以下のスクリプトが役立つ可能性があります。

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.