我使用SQL Server 2008

我用在多个列上一个检查约束在同一个表来尝试验证数据输入。

收到错误:

  

列列检查约束   “AAAA”引用另一列,   表 'XXXX'。

检查约束不起作用以这种方式。

要实现此在单个表,而无需使用任何其他方式FK?

由于

下面的我的代码的示例

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
有帮助吗?

解决方案

是,限定在所述的水平

的检查约束
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约束...?

其他提示

检查约束可以指的是单个列或整个记录。

使用此语法记录级约束:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top