实际上,我需要捕获存储过程的每个查询(更新/删除)和受其影响的行以便跟踪。您可以假设该存储过程仅包含删除和更新命令。
我创建了以下功能
CREATE Function [dbo].[CURRENT_Query] (@SPID int)
Returns nvarchar(max)
Begin
Declare @CURRENT_Query nvarchar(max)
SET @CURRENT_Query =(SELECT t.text
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE session_id = @SPID )
Return @CURRENT_Query
End
然后触发以下查询
declare @row_count int
Update t set T_id =20
from table_name t
where t_id in ('10','11','12')
set @row_count =(select @@rowcount)
select dbo.CURRENT_Query(@@spid),@row_count
现在我想捕获查询和受它影响的行数。我也尝试过在该表上使用更新后触发器
EXEC sp_executesql N'DBCC INPUTBUFFER(@@spid) WITH NO_INFOMSGS'
但我无法捕捉到受查询影响的行数。
我也尝试使用以下查询
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = 104
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
请建议优化的解决方案,以便我可以跟踪存储过程中表上的每个查询和行数