【发布时间】:2012-12-18 01:27:34
【问题描述】:
我正在尝试在 sql server 2008 上添加检查约束。运行此代码时出现以下错误:
alter table db.dbo.myTable add constraint
noWWWifProgramIsKnown check
(dbo.checkcountuniversalservice(A, B,
C)=0 and program='WWW' )
引发错误:
ALTER TABLE 语句与 CHECK 约束冲突 “noWWWifProgramIsKnown”。数据库发生冲突 “db”,表“dbo.tableuniversalservice”。
Marc_s 对 SO 的回答说这很可能 b/c 某些行违反了约束: The ALTER TABLE statement conflicted
但是,没有行违反约束,因为这会返回 0:
select COUNT(*) from db.dbo.tableuniversalservice
where
(dbo.checkcountuniversalservice(A, B, C)=0
and
program='WWW'
)
我错过了什么?
【问题讨论】:
-
以及表名,您的
SELECT语句似乎与您想要的相反:您正在查询与CHECK条件匹配的行数,结果是零。所以要么表中没有行,要么都与CHECK约束冲突。你可能想输入SELECT ... WHERE NOT (...)?
标签: sql sql-server sql-server-2008 tsql check-constraints