如何在不修改存储过程的情况下逐次显示其执行输出消息?
解决方法
不用修改存储过程usp_UpdateSales的话,可在每次调用后结合@@ROWCOUNT和带WITH NOWAIT选项的RAISERROR实现即时输出影响行数的效果:
- 每次调用存储过程后,立即执行以下语句,就能把本次调用的影响行数实时输出:
RAISERROR('%d rows affected', 0, 1, @@ROWCOUNT) WITH NOWAIT;
连续四次调用的完整示例脚本如下:
-- 第一次调用 EXEC usp_UpdateSales; RAISERROR('%d rows affected', 0, 1, @@ROWCOUNT) WITH NOWAIT; -- 第二次调用 EXEC usp_UpdateSales; RAISERROR('%d rows affected', 0, 1, @@ROWCOUNT) WITH NOWAIT; -- 第三次调用 EXEC usp_UpdateSales; RAISERROR('%d rows affected', 0, 1, @@ROWCOUNT) WITH NOWAIT; -- 第四次调用 EXEC usp_UpdateSales; RAISERROR('%d rows affected', 0, 1, @@ROWCOUNT) WITH NOWAIT;
关键细节说明:
@@ROWCOUNT必须紧跟在EXEC语句之后,它会返回上一条执行语句(即存储过程)影响的行数,一旦被其他语句执行就会被覆盖。RAISERROR的参数中,0是严重级别(属于提示类,不会中断执行),1是状态码,配合WITH NOWAIT选项就能让消息直接发送到客户端,而非缓存到整个脚本执行完毕后统一输出。
如果使用SQL Server 2012及以上版本,也可以用PRINT结合sys.sp_executesql的方式实现,但RAISERROR WITH NOWAIT是更直接适配该需求的写法,完全不需要修改原有存储过程。
内容的提问来源于stack exchange,提问作者fdkgfosfskjdlsjdlkfsf
相关产品推荐
相关产品推荐

