簡體   English   中英

ERROR列的CHECK約束引用另一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM