【问题标题】:Can I create a function in order to catch recently executed query and rows affected by it?我可以创建一个函数来捕获最近执行的查询和受它影响的行吗?
【发布时间】:2018-09-14 03:17:40
【问题描述】:

实际上,我需要捕获存储过程的每个查询(更新/删除)和受其影响的行,以便跟踪。 您可以假设该存储过程仅包含删除和更新命令。

我已经创建了以下函数

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)

请建议优化的解决方案,以便我可以跟踪存储过程中表上的每个查询和行数

【问题讨论】:

  • 呃,sql-server没有日志功能吗?
  • 从您的问题看来,您只需要 YesNo 作为答案。我们需要您的尝试才能更好地提供帮助
  • 关于什么?在某些表格上删除/插入?或者在一个数据库的所有表上?并跟踪数据库中的所有插入/删除:接收插入/删除的 sys 表呢?请提供更详细的示例和有关您的数据库结构的一些信息。
  • 嗯....唯一的问题是您是否可以创建一个函数来做到这一点。我们实际上无法回答这个问题。这是可能的,但只有您可以决定是否可以。除非你提供一些关于你真正想要做什么的细节,否则这个问题太模糊了。
  • 我一生都无法理解为什么有人会对此表示赞同。似乎对否定和肯定问题的投票与问题的实际质量几乎无关。

标签: sql-server function stored-procedures dynamic-view


【解决方案1】:

这是检查最近运行的前 1000 个 sql 的示例。 希望对你有帮助。

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

【讨论】:

  • 您需要包含行数才能作为对所提问题的回答。 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-14
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多