2010-05-17 98 views
2

我想为我的存储过程创建一个通用日志记录解决方案,允许我记录输入参数的值。目前我正在或多或少的手工做这件事,我对这种做法感到非常不满。理想情况下,我想说一些如下:如何从存储过程(SQL Server 2005)捕获输入参数?

“给我的spid,我的输入参数和它们的值是什么?”

这是我运行SQL Profiler时暴露给我的信息 - 存储过程的名称,所有输入参数和所有输入VALUES都列在我的列表中。如何从存储过程中获得这些值?

谢谢; Duncan

回答

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存储过程,在不同的连接上执行一个批处理。做这样的事情,但它可能比它的价值更麻烦。

+0

是的,这是我的第一个方法。如果可能的话,我希望在不诉诸CLR的情况下这样做。 – Duncan 2010-05-18 20:56:48