Sql-Server-2005

如何在伺服器跟踪期間查看 sql 語句中使用的變數的值?

  • March 12, 2012

我有一個儲存過程,其中包含帶有變數的 SQL 語句。例如,

update customer set cust_id = @newcust_id where issuedate < @transferdate and cust_id = @oldcust_id

變數的值在 SP 中較早地分配。

如何在伺服器跟踪期間顯示這些變數的值?

出於調試目的,您可以通過以下方式使用自定義事件將它們顯式跟踪到 Profiler 中sp_trace_generateevent

declare @tracedata varbinary(8000);
set @tracedata = cast(@transferdate as varbinary(8000));
exec sp_trace_generateevent 82, 
       N'@transferdate', 
       @tracedata );
set @tracedata = cast(@oldcust_id as varbinary(8000));
exec sp_trace_generateevent 82, 
       N'@oldcust_id', 
       @tracedata);

您需要修改 Profiler 會話以監視使用者User-Configurable Event Class,否則您將看不到生成的事件。sp_trace_generateevent調試完成後,我還將註釋掉對生產環境的呼叫。該呼叫不是非常昂貴(特別是如果沒有監聽監聽它),但它應該被刪除。

更新

exec呼叫不允許將 CAST 內聯到參數列表中。我修改了程式碼以顯示如何在 exec 之前進行轉換。該值將在BinaryData列中,以十六進製表示(因此'daf'將顯示為0x646166)。

引用自:https://dba.stackexchange.com/questions/14427