[英]ERROR Column CHECK constraint for column references another column
我使用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無法創建約束。 查看以前的錯誤。
在列級別內聯定義的約束只能引用它們旁邊定義的列。
將約束定義移動到正確的列旁邊,或將約束定義移動到表定義的末尾。
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)
)
最后一種方法還允許您聲明引用多個列的行級約束。
我在這里如何解決。
HeatingSystem tinyint NOT NULL
CONSTRAINT CK_ReProperties_HeatingSystem CHECK(HeatingSystem between 0 and 3),
有了你的評論,我不明白“尺寸”來自哪里......
你能做到嗎?
CONSTRAINT CK_ReProperties_HeatingSystem CHECK(HeatingSystem between 0 and 3)
我嘗試了你的查詢,它給我一個錯誤,因為Invalid column name 'Size'.
您應該寫下columnname - 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') )
)
只需使用表級約束,即將約束移動到表定義的末尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.