27

我使用 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),
);
4

3 回答 3

53

是的,在级别定义 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
);

当然,问题仍然存在,您是否使用了应该是 FK 约束的 CHECK 约束......?

于 2010-08-09T07:30:24.273 回答
2

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

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

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
于 2010-08-09T07:33:08.410 回答
1

您可以简单地在表上的触发器中应用您的验证,尤其是如果检查失败,无论哪种方式操作都将回滚。

于 2010-08-09T12:51:18.793 回答