SQLServerで列は既にデフォルトにバインドされています。と言われた場合の対処

プログラミング SQL Server

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 'カラム名'
タイトルとURLをコピーしました