SQL Server 2005の既存のテーブルに一意の制約を作成するにはどうすればよいですか?
データベースダイアグラムでTSQLとその方法の両方を探しています。
SQLコマンドは次のとおりです。
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
完全な構文 here を参照してください。
データベースダイアグラムから実行する場合:
SQL Server Management Studio Expressの場合:
ALTER TABLE [TableName] ADD CONSTRAINT [constraintName] UNIQUE ([columns])
警告:一意に設定した列に含めることができる空行は1つだけです。
SQL 2008のフィルター選択されたインデックスを使用してこれを行うことができます。
CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;
回答の範囲については、 フィールド値がNULLでない限り一意である必要があります を参照してください。
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
また、データベースダイアグラムを介してこれを実行できることもわかりました。
テーブルを右クリックし、インデックス/キーを選択して...
[追加]ボタンをクリックし、列を一意にしたい列に変更します。
変更は「はい」に固有です。
[閉じる]をクリックしてダイアグラムを保存すると、テーブルに追加されます。
テーブルが既に作成されているときに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でサポートされているクエリ
Management Studioダイアグラムでテーブルを選択し、必要に応じて右クリックして新しい列を追加し、列を右クリックして[制約のチェック]を選択すると、追加できます。
場合によっては、一意キーを作成する前に存在しないようにすることが望ましい場合があります。そのような場合、以下のスクリプトが役立ちます。
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