我想为我的存储过程创建一个通用的日志记录解决方案,允许我记录输入参数的值。目前我或多或少是手工完成的,我对这种方法非常不满意。理想情况下,我想说类似以下的话:
“给定我的 spid,我的输入参数和它们的值是什么?”
这与我运行 SQL Profiler 时向我公开的信息相同——为我列出了存储过程的名称、所有输入参数和所有输入值。如何从存储过程中获取这些值?
谢谢; 邓肯
我想为我的存储过程创建一个通用的日志记录解决方案,允许我记录输入参数的值。目前我或多或少是手工完成的,我对这种方法非常不满意。理想情况下,我想说类似以下的话:
“给定我的 spid,我的输入参数和它们的值是什么?”
这与我运行 SQL Profiler 时向我公开的信息相同——为我列出了存储过程的名称、所有输入参数和所有输入值。如何从存储过程中获取这些值?
谢谢; 邓肯
这在存储过程中很难做到。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 存储过程。做那种事情,但它可能比它的价值更麻烦。