2010-05-17 96 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