我使用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 无法创建约束。查看以前的错误。
答案 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)
只需使用表级约束,即将约束移到表定义的末尾即可。