alter命令与check约束冲突(但没有行违反约束)

时间:2012-12-07 22:21:04

标签: sql sql-server sql-server-2008 tsql check-constraints

我正在尝试在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'
)

我错过了什么?

1 个答案:

答案 0 :(得分:3)

我认为您的检查是向后的...为了使约束通过,它应该评估为TRUEUNKNOWN。您的SELECT语句告诉您没有行符合约束,而不是告诉您没有行违反约束。

From MSDN

  

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