gpt4 book ai didi

sql-server - T-SQL。过程调用的文本

转载 作者:行者123 更新时间:2023-12-02 11:37:28 26 4
gpt4 key购买 nike

我正在尝试为我的存储过程实现通用日志记录。我发现的最好的解决方案是使用 DBCC INPUTBUFFER,它返回过程调用的文本,例如:

DECLARE @a INT
SET @a = 1000
EXEC usp_Test @param = @a

但它有一个限制,该缓冲区的最大长度为 4000。我有很多具有表值参数的过程,并且它们通常包含 > 10000 条记录,因此我无法使用这种方法记录此调用。

是否有任何方法可以实现此类日志记录,而无需在每个过程中手动创建“过程调用文本”?

最佳答案

您可以尝试使用dm_exec_sql_text,而不是使用DBCC INPUTBUFFER @SPID

它有一个 nvarchar(max) 字段作为最后一个 SP 的 Text

尝试为此代码构建一个函数(期望 @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)

另一种使用方式:

EXEC yourProcedure withYourParams
SELECT @sqltext = sql_handle FROM sys.sysprocesses WHERE spid = @@SPID

SELECT TEXT FROM ::fn_get_sql(@sqltext)

您可以使用@@SPID来代替@SPID参数,但是此代码段将与您上次的SP调用集成。

关于sql-server - T-SQL。过程调用的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com