近日, 我改写了一个以前写的SQL预存程序,
準备加上自行纪录Log的功能 (判断insert 或 update是否成功, 然后在放log的 table里 insert 1笔新的log)
可是
因为这只SQL预存程序
里头写了一堆 if 以及有用到一些 select 在insert 或 update之前
所以
当我把
if (@@ROWCOUNT > 0)
begin
-- insert log的相关语法
end
放在该SQL预存程序最后的 end 之前时
竟然只有最后1个 if 区块内的 insert 或 update 才抓得到 @@ROWCOUNT ?
这个问题发生在 SQL Server 2005 Express
于是
只好多加1个变数
DECLARE @IsOutLog AS int;
set @IsOutLog = 0;
并在每一个 insert 或 update 之后, 都加上
if (@@ROWCOUNT > 0)
set @IsOutLog = 1;
以保留做为判断是否写log的依据
这样才终于使SQL预存程序达到预期的效果
谜啊?
明明我是用一堆if 区块去做 功能区分的
在 insert 或 update 之后, 就没有再做任何的 select 或 insert 或 update
为何 @@ROWCOUNT 的值还会被影响到?