检查多列上的CONSTRAINT

时间:2010-08-09 07:24:12

标签: sql sql-server check-constraint

我使用SQL Server 2008

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

我收到错误:

  

列的CHECK约束   'AAAA'引用另一列,   表'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),
);

3 个答案:

答案 0 :(得分:43)

是,在级别定义CHECK CONSTRAINT

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

   CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)

您将其内联声明为约束

...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...

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

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
);

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

答案 1 :(得分:2)

检查约束可以引用单个列或整个记录。

将此语法用于记录级约束:

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)

答案 2 :(得分:1)

您只需在表格的触发器中应用验证,尤其是在检查失败时将回滚操作的任何一种方式。