SQLServerでテーブルのカラムの属性変更でデフォルト値を変更しようとするとエラーになります。
その回避方法です。
テーブルのカラムの属性変更でデフォルト値を変更する
テーブルのカラムの属性変更でデフォルト値を変更したいのですが、エラーが発生しました。
いきなり変更するとエラーになる
SQLServerでテーブルのカラムの属性変更でデフォルト値を変更しようとすると
メッセージ 1781、レベル 16、状態 1、行 1 列は既にデフォルトにバインドされています。 メッセージ 1750、レベル 16、状態 0、行 1 制約を作成できませんでした。以前のエラーを調べてください。
というエラーになりました。
これは文字通り「すでにデフォルト値が設定」されているわけです。
どうやらデフォルト値を変更するには一旦すでにあるデフォルト値を削除してから再度追加しないといけないようです。
一旦削除して変更する
制約を削除するにはテーブルのID、カラムのIDが必要なので、それを順番に取得します。
1.テーブルのIDを取得
まずは
SELECT
id
FROM
sys.sysobjects
WHERE
xtype = 'U'
AND name = 'テーブル名'
でテーブルのIDを取得します。
2.カラムのIDを取得
次に取得したテーブルIDを使って
SELECT
column_id
FROM
sys.columns
WHERE
object_id = 99999
AND name = 'カラム名'
カラムのIDを取得します。(99999は取得したテーブルのIDです。)
3.カラムの制約を取得
この2つを使って該当のカラムの制約を取得します。
SELECT
name
FROM
sys.sysobjects
WHERE
id = ( SELECT constid FROM sys.sysconstraints
WHERE id = 9999 AND colid = 88 )
88はカラムのIDです。
4.カラムの制約を削除
取得した制約を削除します。
ALTER TABLE 'テーブル名' DROP CONSTRAINT '取得した制約名'
5.デフォルト値を設定
最後に新しいデフォルト値を設定します。
ALTER TABLE 'テーブル名' ADD DEFAULT [追加するデフォルト値] FOR 'カラム名'
