【问题标题】:Why can't I add a column to an existing table with a checkConstraint that references other columns in SQL为什么我不能使用引用 SQL 中其他列的 checkConstraint 将列添加到现有表
【发布时间】:2022-01-13 20:04:10
【问题描述】:

我正在使用 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' 的列 CHECK 约束引用另一列,表 'table'。

查看文档,所以我无法确定为什么会这样

【问题讨论】:

  • 什么是“不起作用”。意思是?你有错误吗?如果是这样,错误是什么?
  • 将编辑上面的问题!但错误如下:`列'isTrue'的列CHECK约束引用另一列,表'table'。`

标签: sql sql-server tsql alter-table check-constraints


【解决方案1】:

您的语法不太正确。引用多列的约束是表约束。您正在尝试添加表约束,因此在 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 会认为您正在尝试添加列约束,因此会出现您引用不同列的错误。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多