ERROR列的CHECK约束引用另一列

时间:2012-06-25 06:31:52

标签: sql sql-server-2008-r2

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

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

错误

Msg 8141,Level 16,State 0,Line 1 列'HeatingSystem'的列CHECK约束引用另一列,表'ReProperties'。 Msg 1750,Level 16,State 0,Line 1 无法创建约束。查看以前的错误。

6 个答案:

答案 0 :(得分:12)

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

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

失败

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约束。

答案 1 :(得分:0)

这是我如何解决的。

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

答案 2 :(得分:0)

根据你的评论,我不明白“尺寸”的来源......

你不能只做

CONSTRAINT  CK_ReProperties_HeatingSystem   CHECK(HeatingSystem between 0 and 3)

答案 3 :(得分:0)

我尝试了您的查询,并且错误为Invalid column name 'Size'.您应该写下列名 - HeatingSystem来代替size。使用以下内容: -

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

答案 4 :(得分:0)

您可能只是在单词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') )
)

答案 5 :(得分:0)

只需使用表级约束,即将约束移到表定义的末尾即可。