今天碰到一个存储过程,在最后竟然用了2个并列的 if 判断:
if @p_mdfx='S'
......
if @p_mdfx<>'S'
......
而后紧接着判断:
if @@rowcount = 0
begin
...... 失败!
结果每次都是 0 .......
网上已经有资料表明:
官方说 @@ROWCOUNT 会被以下几种语句清 0
原文如下:
Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.
可是实际情况有可能远不止这些:
例如:
print(@@ROWCOUNT ) 也会将 @@ROWCOUNT 清 0
if @@ROWCOUNT > 0 也会将 @@ROWCOUNT 清 0
实际测试发现对 @@error 也是这样
所以在实际存储过程中,需要注意这点!