我使用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),
);
答案 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)
您只需在表格的触发器中应用验证,尤其是在检查失败时将回滚操作的任何一种方式。