1

我正在尝试在 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 某些行违反了约束: ALTER TABLE 语句冲突

但是,没有行违反约束,因为这将返回 0:

select COUNT(*) from db.dbo.tableuniversalservice 
where
(dbo.checkcountuniversalservice(A, B, C)=0
and 
program='WWW'
)

我错过了什么?

4

1 回答 1

3

我认为你的检查是倒退的......为了让约束通过,它应该评估为TRUEor to UNKNOWN。您的SELECT语句告诉您没有行符合约束,而不是告诉您没有行违反约束。

来自 MSDN

CHECK 约束拒绝评估为 FALSE 的值。

于 2012-12-07T23:00:06.487 回答