为什么我不能使用引用 SQL 中其他列的 checkConstraint 将列添加到现有 table

Why can't I add a column to an existing table with a checkConstraint that references other columns in SQL

我正在使用 SQL 服务器并尝试添加一个列和一个检查约束。我发现以下有效:

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)

输出如下错误:

Column CHECK constraint for column 'isTrue' references another column, table 'table'.

查看文档和 SO 我无法确定为什么会这样

你的语法不太正确。引用多列的约束是 table 约束。您正在尝试添加一个 table 约束,因此您需要在 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 服务器认为您正在尝试添加列约束,因此错误是您引用了不同的列。