检查多列上的CONSTRAINT

Gib*_*boK 21 sql sql-server check-constraint

我使用SQL Server 2008

我在同一个表中的多个列上使用CHECK CONSTRAINT来尝试验证数据输入.

我收到一个错误:

列'AAAA'的列CHECK约束引用另一列,表'XXXX'.

CHECK CONSTRAINT不能以这种方式工作.

在不使用FK的情况下在单个表上实现此目的的任何其他方法?

谢谢

这是我的代码示例

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 46

是的,在级定义CHECK CONSTRAINT

CREATE TABLE foo (
   bar int NOT NULL, 
   fred varchar(50) NOT NULL,

   CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
Run Code Online (Sandbox Code Playgroud)

您将其内联声明为约束

...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...
Run Code Online (Sandbox Code Playgroud)

编辑,比描述更容易发布.修正了你的逗号.

CREATE TABLE dbo.Test 
(   
  EffectiveStartDate  dateTime2(2)        NOT NULL,
  EffectiveEndDate    dateTime2(2)        NOT NULL,  --need comma
  CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);
Run Code Online (Sandbox Code Playgroud)

当然,问题仍然是你使用CHECK约束,它应该是一个FK约束......?

  • “逻辑上约束是在行级别定义的”——注意“逻辑上”这个词。您可以在逻辑上在每个级别设置约束:(列、域、行、表、架构、数据库、企业、全局)。SQL Server 文档反映了这样一个事实,即该产品仅支持两个物理级别的 CHECK 约束,称为“列”和“表”,但在逻辑上分别是列级别和行级别。 (2认同)