web-dev-qa-db-ja.com

SQLで他の列を参照するCheckConstraintを使用して既存のテーブルに列を追加できないのはなぜですか

SQL Serverを使用しています。列と小切手制約を追加しようとしています。次の作品を見つけました。

ALTER TABLE table.column
    ADD isTrue BIT

GO
ALTER TABLE table.column
    ADD CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0)
 _

しかし、これを書くことの詳細な方法はうまくいきません。

ALTER TABLE table.column
    ADD isTrue BIT
    CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0)
 _

次のエラーが出力されます。

列チェック制約列 'istrue'は別の列、テーブル 'Table'を参照しています。

ドキュメントとSO)これが事件の理由を判断できませんでした

1
hikarunoryoma

あなたの構文は非常に正しくありません。複数の列を参照する制約はテーブル制約です。テーブル制約を追加しようとしているので、ISTRUEのデータ型定義の後にコンマが必要です。

ALTER TABLE table.column
    ADD isTrue BIT,
    CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0);
 _

コンマSQL Serverがなくても、列制約を追加しようとしていると考えていると考えています。

2
squillman