sql-server - 存储过程选择语句中受影响的 SQL Server 日志记录行
问题描述
我有一个日志表,其中写入与调用某些仅包含选择语句的存储过程相关的各种信息。其中一个信息是存储的程序返回的行数。
一种方法是:
- 运行相对于最终选择指令的计数
- 在日志表中插入信息
- 执行最终选择指令
有没有办法在不进行双重查询(第一个带有计数,第二个带有选择)的情况下恢复行受影响的信息?
提前致谢
解决方案
您应该能够使用@@ROWCOUNT
来获取受执行的最后一条语句影响的行数。
请参阅:https ://docs.microsoft.com/en-us/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-ver15
根据您的评论,这是一个包含示例的编辑,其中 select 语句仍然是存储过程的输出。对日志表的插入是在 select 语句之后,因此该@@ROWCOUNT
命令仍然有效,同时仍然提供实际查询结果作为输出。
DROP TABLE IF EXISTS ##LOG
CREATE TABLE ##Log
(
ProcName NVARCHAR(100)
,ExecutionTime DATETIME
,TotalRowsReturned INT
)
GO
CREATE PROCEDURE TestProc
AS
BEGIN
SET NOCOUNT ON
DECLARE @numRows INT = RAND()*(50-5)+5;
SELECT TOP (@numRows) *
FROM sys.objects
INSERT INTO ##Log
(
ProcName,
ExecutionTime,
TotalRowsReturned
)
SELECT
OBJECT_NAME(@@PROCID)
,GETDATE()
,@@ROWCOUNT
SET NOCOUNT OFF
END
GO
EXEC TestProc
GO 5
SELECT * FROM ##Log
推荐阅读
- java - 错误:表达式和“;”的非法开始 预期的
- javascript - 如何从 ES 中的字符串确定文件大小?
- laravel - Laravel,无法更新软删除的值
- java - 创建回文数列表
- javascript - 打印每个单词的第一个字母,然后是第二个字母,然后是第三个,依此类推
- python - 如果 pip 在单个 RUN 部分中安装并更新到 10.0.1,则 Docker 构建失败
- arrays - 从 MIPS 中声明的数组打印
- python - 如何在 Pycharm 中更改终端提示颜色
- perl - perl 创建哈希值,其中值是数组
- php - php在输入字段动态中添加“必需”