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