Могу ли я создать функцию для отслеживания недавно выполненного запроса и строк, на которые он влияет?

На самом деле, мне нужно отлавливать каждый запрос (обновление / удаление) и затрагиваемые им строки хранимой процедуры, чтобы отслеживать. Вы можете предположить, что эта хранимая процедура содержит только команды удаления и обновления.

Я создал следующую функцию

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)

Пожалуйста, предложите оптимизированное решение, чтобы я мог отслеживать каждый запрос и количество строк в таблице в хранимой процедуре

1 ответ

Это пример проверки последних 1000 sqls, запущенных за последнее время. Надеюсь, это поможет вам.

SELECT TOP 1000 
QS.creation_time, 
SUBSTRING(ST.text,(QS.statement_start_offset/2)+1, 
((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) 
ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1 
) AS statement_text, 
ST.text, 
QS.total_worker_time, 
QS.last_worker_time, 
QS.max_worker_time, 
QS.min_worker_time 
FROM 
sys.dm_exec_query_stats QS 
CROSS APPLY 
sys.dm_exec_sql_text(QS.sql_handle) ST 
ORDER BY 
QS.creation_time DESC
Другие вопросы по тегам