デフォルト制約が設定されている列は、
そのままでは削除できません!
列を削除する前に
・列に設定されているデフォルト制約を削除
する必要があります!
デフォルト制約が設定されている列の削除を試みると…
例えば
・デフォルト制約が設定されているテーブル「m_product」の
・列「price」の削除を試みるとエラーが発生
します。
デフォルト制約が設定されている列を削除する前に
・列に設定されているデフォルト制約を削除
する必要があります。
列に設定されているデフォルト制約を削除する
デフォルト制約名は、SSMSの「オブジェクトエクスプローラー」で確認できます。
例えば
・テーブル「m_product」の列「price」に設定されている
・デフォルト制約名は「DF__m_product__price__318258D2」
であることが分かります。
以下のSQLでもデフォルト制約名を取得できます。
DECLARE
@tableName VARCHAR(30),
@columnName VARCHAR(30),
@tableId VARCHAR(10),
@columnId VARCHAR(10)
--対象テーブルを指定
SET @tableName = 'm_product'
--対象列を指定
SET @columnName = 'price'
--対象テーブルの「テーブルID」を取得
SET @tableId = (SELECT id FROM sys.sysobjects WHERE xtype = 'U' AND name = @tableName)
--対象テーブルの「列ID」を取得
SET @columnId = (SELECT column_id FROM sys.columns WHERE object_id = @tableId AND name = @columnName)
--「テーブルID」と「列ID」を使用して、「デフォルト制約名」を取得
SELECT
name AS 'デフォルト制約名'
FROM
sys.sysobjects
WHERE id = (SELECT constid FROM sys.sysconstraints WHERE id = @tableId AND colid = @columnId)
取得したデフォルト制約名を使用して、デフォルト制約を削除します。
デフォルト制約の削除の構文
ALTER TABLE テーブル名 DROP CONSTRAINT デフォルト制約の名前
--デフォルト制約を削除
ALTER TABLE m_product DROP CONSTRAINT DF__m_product__price__318258D2
上記のSQLを実行すると、デフォルト制約が削除されたことを確認できます。
列を削除する
デフォルト制約が無くなったため、通常の方法で列を削除できます。
--列の削除
ALTER TABLE m_product DROP COLUMN price
上記のSQLを実行すると、列が削除されたことを確認できます。
参考
列を削除する方法の詳細については、以下の記事をご確認ください。