我有一个要求,即只有从表中实际删除了一行,我才必须在C ++代码中记录消息。有没有办法从SQL Server 2012获取确认消息,删除语句实际上删除了一行? Count(*)不会有用,因为有多个客户端将数据填入表中。所以不能依靠计数之前和之后。
提前致谢
答案 0 :(得分:2)
我个人使用非常简单的方法。
当我从表中删除一行时,我知道它的主键是ID
。我在DELETE ... WHERE ...
语句中使用此主键值。然后我使用相同的SELECT ... WHERE ...
ID
并检查它返回的行数。如果没有返回行,我确信该行已成功删除。或者SELECT COUNT(*) WHERE ...
使用ID
并查看计数。
我使用这种方法的情况是我有很多子表与我正在删除行的表有关。所有相关表都配置了外键和参照完整性约束。所有约束都是简单的CHECK CONSTRAINT
,没有级联删除。如果用户确实需要从主表中删除一行,则必须首先删除所有子行。如果用户尝试从master删除时仍存在相关子行,则由于引用约束,删除将失败。
此外,还有@@ROWCOUNT或ROWCOUNT_BIG:
返回最后一个语句影响的行数。如果 行数超过20亿,使用ROWCOUNT_BIG。
在SELECT @@ROWCOUNT
声明后立即使用DELETE
。