SQL Server约束检查不起作用

时间:2012-09-25 13:24:08

标签: sql-server-2008 constraints

我正在使用constraint强制在sql server 2008数据库中使用业务规则,

alter table TableName with check  
Add check    
(
    (col1 = 1 and col2 > 0)  
    or   
    col1 = 0  
)

当我尝试在Management Studio中执行插入查询时

update TableName set col1 = 1 where Id = 1; --the col2 =0 so it is not valid according to above constraint

执行后,我收到消息(1 row(s) affected),没有任何错误消息!!

但实际上当我检查表中的数据时,它没有改变(这是正确的动作)。

编辑:所以使用1 row(s) affected执行异常行为,尽管没有行影响...

2 个答案:

答案 0 :(得分:0)

问题表明约束是“使用check”创建的,并且您进一步声明UPDATE语句中引用的“col2”值为0的记录已经存在。如果禁止col2 = 0的约束“with check”,则它应该在该记录的创建时出错,因此在执行更新时不会产生任何约束。这可能解释了你所目睹的行为。

答案 1 :(得分:0)

您可以添加commit;以提交交易