为什么我不能使用引用 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 服务器认为您正在尝试添加列约束,因此错误是您引用了不同的列。
我正在使用 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 服务器认为您正在尝试添加列约束,因此错误是您引用了不同的列。