SQL Server Management Studio を使用して制約付きの列を削除する方法
SQL Server で制約付きの列を削除する方法
SQL Server Management Studio (SSMS) を使用して、制約付きの列を簡単に削除できます。
- オブジェクト エクスプローラーで、列を削除するテーブルに移動します。
- テーブルを右クリックし、 [デザイン] を選択します。
- テーブル デザイナーが開きます。
- 列が削除されます。
Transact-SQL を使用して、制約付きの列を削除することもできます。
DEFAULT 制約
列に DEFAULT 制約がある場合、削除前に削除する必要があります。
ALTER TABLE your_table
DROP CONSTRAINT your_default_constraint;
CHECK 制約
ALTER TABLE your_table
DROP CONSTRAINT your_check_constraint;
外部キー制約
列に外部キー制約がある場合、参照しているテーブルから列を削除する必要があります。さもなければ、エラーが発生します。
参照制約を削除する
ALTER TABLE your_referencing_table
DROP CONSTRAINT your_foreign_key_constraint;
列を削除する
ALTER TABLE your_table
DROP COLUMN your_column;
PRIMARY KEY 制約
列が PRIMARY KEY の一部である場合、列を削除する前に PRIMARY KEY 制約を変更する必要があります。
ALTER TABLE your_table
ALTER COLUMN your_column DROP CONSTRAINT your_primary_key_constraint;
ALTER TABLE your_table
DROP COLUMN your_column;
UNIQUE 制約
ALTER TABLE your_table
DROP CONSTRAINT your_unique_constraint;
その他の注意事項
- 列を削除すると、その列のすべてのデータが失われます。削除前にデータをバックアップしていることを確認してください。
- 列が他のテーブルで使用されている場合は、その列を削除できない場合があります。まず、その列を使用しているテーブルから列を削除する必要があります。
- 列がインデックスの一部である場合、列を削除する前にインデックスを削除する必要があります。
SQL Server 2008 では、DROP COLUMN
ステートメントを使用して制約付きの列を削除することはできません。代わりに、上記の Transact-SQL ステートメントを使用して、まず制約を削除してから列を削除する必要があります。
SQL Server で制約付きの列を削除するサンプルコード
-- DEFAULT 制約を削除する
ALTER TABLE your_table
DROP CONSTRAINT your_default_constraint;
-- CHECK 制約を削除する
ALTER TABLE your_table
DROP CONSTRAINT your_check_constraint;
-- 列を削除する
ALTER TABLE your_table
DROP COLUMN your_column;
説明:
ALTER TABLE your_table
ステートメントを使用して、変更するテーブルを指定します。DROP CONSTRAINT your_default_constraint
ステートメントを使用して、your_default_constraint
という名前の DEFAULT 制約を削除します。DROP COLUMN your_column
ステートメントを使用して、your_column
という名前の列を削除します。
補足:
- この例では、列に外部キー制約、PRIMARY KEY 制約、または UNIQUE 制約がないことを前提としています。これらのいずれかの制約がある場合は、最初に削除する必要があります。
- 上記の Transact-SQL ステートメントを使用して、まず制約を削除します。
sp_rename
システム プロシージャを使用して、列の名前を一時的な名前に変更します。ALTER TABLE
ステートメントを使用して、列を削除します。
以下の例では、your_table
テーブルから your_column
という名前の列を削除する方法を示します。この列には、your_default_constraint
という名前の DEFAULT 制約と、your_check_constraint
という名前の CHECK 制約があります。
-- DEFAULT 制約を削除する
ALTER TABLE your_table
DROP CONSTRAINT your_default_constraint;
-- CHECK 制約を削除する
ALTER TABLE your_table
DROP CONSTRAINT your_check_constraint;
-- 列の名前を一時的な名前に変更する
EXEC sp_rename 'your_column', 'your_column_temp', 'COLUMN';
-- 列を削除する
ALTER TABLE your_table
DROP COLUMN your_column_temp;
-- 列の名前を元の名前に戻す
EXEC sp_rename 'your_column_temp', 'your_column', 'COLUMN';
SQL Server で制約付きの列を削除するその他の方法
DROP COLUMN WITH CONSTRAINT DELETE を使用する
SQL Server 2019 以降では、DROP COLUMN WITH CONSTRAINT DELETE
句を使用して、列とその関連する制約を同時に削除できます。
ALTER TABLE your_table
DROP COLUMN your_column WITH CONSTRAINT DELETE;
利点:
- この方法は、列と関連する制約をまとめて削除できるため、より簡潔です。
- SQL Server 2019 以降でのみ使用できます。
ALTER TABLE ... NOCHECK を使用する
ALTER TABLE ... NOCHECK
句を使用して、制約のチェックを無効にしてから列を削除することもできます。 ただし、これは 非推奨 の方法であり、データ破損のリスクがあるため、最後の手段 としてのみ使用してください。
ALTER TABLE your_table NOCHECK;
ALTER TABLE your_table
DROP COLUMN your_column;
ALTER TABLE your_table WITH CHECK;
- 外部キー制約など、他の方法で削除できない制約がある場合に役立ちます。
- データ破損のリスクがあるため、最後の手段 としてのみ使用してください。
ALTER TABLE ... WITH CHECK
ステートメントを実行する前に、必ず データベースをバックアップしてください。
sql-server sql-server-2008