T-SQL で DEFAULT 制約を解消するには
SOFTWARE REPORT
T-SQL でディフォルト指定を削除する
Microsoft SQL Server 2008 では、DEFAULT 値は "制約" として登録されています。
これを ALTER COLUMN を用いて変更しようとしても、SQL 文の構文エラーとなってしまいます。また、データ型を変更するような場合にも、DEFAULT 制約が設定されているために、変更できない場合があります。
これを解消するためには、制約名を確認して、それを削除するという方法をとる必要があります。
DEFAULT 制約名を確認する
まず、次のような SQL 文を発行して、DEFAULT が設定されているカラムを持つテーブル "@TABLE_NAME" の ID を取得します。
SELECT id FROM sys.sysobjects WHERE xtype = 'U' AND name = @TABLE_NAME
続いて、その ID を用いて、DEFAULT が設定されているカラム "@COLUMN_NAME" の ID を取得します。
SELECT column_id FROM sys.columns WHERE object_id = @TABLE_ID AND name = @COLUMN_NAME
後は、上記で調べた ID と カラム ID を使用して、制約名を特定します。
SELECT name FROM sys.sysobjects WHERE id = (SELECT constid FROM sys.sysconstraints WHERE id = @TABLE_ID AND colid = @COLUMN_ID)
これで、制約名を取得することができました。
DEFAULT 制約を削除する
制約名が分れば、制約の削除は簡単です。
ALTER TABLE @TABLE_NAME DROP CONSTRAINT @CONSTRAINT_NAME
このようにすることで、制約 @CONSTRAINT_NAME が削除されます。
これで、データ型の変更や、制約の変更を行うことが出来るようになりました。
データ型を変更したい場合には、例えば、次のような感じで変更できます。
ALTER TABLE @TABLE_NAME ALTER COLUMN @COLUMN_NAME INT
また、新たに別の制約を追加したい場合には、次のような感じです。
ALTER TABLE @TABLE_NAME ADD DEFAULT 0 FOR @COLUMN_NAME