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