题
我使用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...)
您可以简单地套用您的验证在触发器在桌子上尤其是无论哪种方式,如果检查失败的操作将被回滚。
不隶属于 StackOverflow