web-dev-qa-db-ja.com

SQL Server 2005独自の制約の作成方法

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

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

181
David Basarab

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

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

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

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

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

SQL Server Management Studio Expressの場合:

  • テーブルを右クリックし、-変更または設計(後のバージョン用)を選択します
  • フィールドを右クリックして、Indexes/Keys ...を選択します
  • 追加をクリックします
  • の場合、一意にするフィールド名を選択します。
  • Typeの場合、nique Keyを選択します。
  • 閉じる保存テーブルをクリックします。
84
James Lawruk
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
28
WildJoe

警告:一意に設定した列に含めることができる空行は1つだけです。

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

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

回答の範囲については、 フィールド値がNULLでない限り一意である必要があります を参照してください。

15
Squirrel
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
13
Ivan Bosnic

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

テーブルを右クリックし、インデックス/キーを選択して...

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

変更は「はい」に固有です。

[閉じる]をクリックしてダイアグラムを保存すると、テーブルに追加されます。

10
David Basarab

次のようなものを探しています

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

MSDNドキュメント

8
Thunder3

テーブルが既に作成されているときに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でサポートされているクエリ

6
Rafiq

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

5
Gibbons

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

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
0
Mario Vázquez