ERROR列的CHECK约束引用另一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ERROR列的CHECK约束引用另一列相关的知识,希望对你有一定的参考价值。

我使用MS SQL 2008 R2,我需要在特定列上创建一个带有CHECK的表但是我收到此错误。你能指出我正确的方向吗?谢谢

HeatingSystem   tinyint             NOT NULL
    CONSTRAINT  CK_ReProperties_HeatingSystem   CHECK(Size between 0 and 3),

错误

消息8141,级别16,状态0,行1列“加热系统”列的CHECK约束引用另一列,表'ReProperties'。消息1750,级别16,状态0,行1无法创建约束。查看以前的错误。

答案

有了你的评论,我不明白“尺寸”来自哪里......

你能做到吗?

CONSTRAINT  CK_ReProperties_HeatingSystem   CHECK(HeatingSystem between 0 and 3)
另一答案

在列级别内联定义的约束只能引用它们旁边定义的列。

将约束定义移动到正确的列旁边,或将约束定义移动到表定义的末尾。

失败

CREATE TABLE HeatingSystem
(
Size INT,
HeatingSystem TINYINT CHECK(Size between 0 and 3)
)

成功

CREATE TABLE HeatingSystem
(
Size INT CHECK(Size between 0 and 3),
HeatingSystem TINYINT
)   

也成功了

CREATE TABLE HeatingSystem
(
Size INT ,
HeatingSystem TINYINT,
CHECK(Size between 0 and 3 AND HeatingSystem BETWEEN 1 AND 10)
)  

最后一种方法还允许您声明引用多列的row level约束。

另一答案

我在这里如何解决。

HeatingSystem   tinyint             NOT NULL
    CONSTRAINT  CK_ReProperties_HeatingSystem   CHECK(HeatingSystem between 0 and 3),
另一答案

我尝试了你的查询,它给了我错误,因为Invalid column name 'Size'.你应该写一个列名 - HeatingSystem代替size。使用以下内容: -

HeatingSystem   tinyint             NOT NULL
 CONSTRAINT  CK_ReProperties_HeatingSystem   CHECK(HeatingSystem between 0 and 3),
另一答案

你可能只是在CONSTRAINT这个词之前错过了一个逗号分隔符!!

例如,如果在下面的片段([WorkLocationId])中的“,”之后缺少,则它将为列引用抛出ERROR Column CHECK约束另一个列错误。

这会抛出错误 -

CREATE TABLE [MYSYSTEM].[User](
[UserId] int Primary key NOT NULL,
[UserName] [nvarchar](50) NULL,
[UserStatus] [nvarchar](1) NULL,
[CreatedDate] [Datetime] NOT NULL,
[WorkLocationId] int NOT NULL Foreign Key References [HRSYSTEM].[WorkLocations]([WorkLocationId])
CONSTRAINT [_UserStatusValues] CHECK ([UserStatus] IN ('A','I') )
)

这将有效 -

CREATE TABLE [MYSYSTEM].[User](
[UserId] int Primary key NOT NULL,
[UserName] [nvarchar](50) NULL,
[UserStatus] [nvarchar](1) NULL,
[CreatedDate] [Datetime] NOT NULL,
[WorkLocationId] int NOT NULL Foreign Key References [HRSYSTEM].[WorkLocations]([WorkLocationId]),
CONSTRAINT [_UserStatusValues] CHECK ([UserStatus] IN ('A','I') )
)

以上是关于ERROR列的CHECK约束引用另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何将引用另一列的函数添加到 libreoffice-calc?

EXCEL里怎样引用某数值对应的另一列的值?

当另一列具有特定值时,列上的 NOT NULL 约束

sqlserver 约束

4大约束

mysql:在w3schools文档上学习sql语法(check约束)