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约束引用另一列的主要内容,如果未能解决你的问题,请参考以下文章