Eug*_*ene 9 t-sql sql-server logging stored-procedures
我正在尝试为我的存储过程实现通用日志记录.我找到的最佳解决方案是使用DBCC INPUTBUFFER,它返回过程调用的文本,如:
DECLARE @a INT
SET @a = 1000
EXEC usp_Test @param = @a
Run Code Online (Sandbox Code Playgroud)
但它有一个限制,这个缓冲区的最大长度是4000.我有很多具有表值参数的过程,并且它们通常包含> 10000条记录,所以我不能用这种方法记录这个调用.
有没有办法实现这样的日志记录,而无需在每个过程中手动创建"过程调用文本"?
DBCC INPUTBUFFER @SPID
您可以尝试使用dm_exec_sql_text而不是使用
它有一个截至最后一个 SP 的nvarchar(max)
字段。Text
尝试为此代码构建一个函数(期望 as @SPID
int 参数):
--Select the sql_handle first for the given session ID
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = @SPID
--Select the last statement
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
Run Code Online (Sandbox Code Playgroud)
另一种使用方法:
EXEC yourProcedure withYourParams
SELECT @sqltext = sql_handle FROM sys.sysprocesses WHERE spid = @@SPID
SELECT TEXT FROM ::fn_get_sql(@sqltext)
Run Code Online (Sandbox Code Playgroud)
您可以使用代替@SPID
参数 @@SPID
,但是此代码段将与您最后一次 SP 调用集成。
归档时间: |
|
查看次数: |
995 次 |
最近记录: |