关于在SQL Server预存程序里使用 @@ROWCOUNT 须注意

近日, 我改写了一个以前写的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 的值还会被影响到?


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章