我想为我的存储过程创建一个通用的日志记录解决方案,允许我记录输入参数的值。目前我或多或少地手工做这件事,我对这种做法非常不满意。理想情况下,我想说出以下内容:
“鉴于我的spid,我的输入参数及其值是什么?”
这是在运行SQL事件探查器时向我公开的相同信息 - 存储过程的名称,所有输入参数和所有输入值都列在我面前。如何从存储过程中获取这些值?
感谢; 邓肯
答案 0 :(得分:0)
在存储过程中这很难做到。 SQL事件探查器在不同的SPID下运行,并运行这样的语句来捕获其他用户语句:
DECLARE @handle VARBINARY(64)
SELECT @handle = sql_handle from sys.sysprocesses where spid = @SPID
SELECT text FROM sys.dm_exec_sql_text(@handle)
问题是如果你在当前SPID的存储过程中运行它,那么你要回来的就是上面的语句。我不相信SQL服务器提供T-SQL构造来在不同的SPID下执行批处理。我想你可以编写一个.Net dll存储过程,在不同的连接上执行批处理。做那种事情,但它可能比它的价值更麻烦。