2010-03-24 56 views
9

我運行下面的語句,看看哪些查詢在SQL Server中正在執行:如何獲得的參數值dm_exec_sql_text

select * 
from sys.dm_exec_requests r 
cross apply sys.dm_exec_sql_text(r.sql_handle) 
where r.database_id = DB_ID('<dbname>') 

說回來SQL文本參數:

(@Parm0 int) select * from foo where foo_id = @Parm0 

有什麼辦法來獲取該語句正在使用的參數的值?說加入另一張桌子或者?

+0

多一點工作,以這種方式得到它,但它的工作,如果我必須擁有它。謝謝! – 2010-03-26 15:21:55

+1

你有沒有發現這個解決方案?接受的答案似乎並不奏效...... – 2016-03-11 10:47:59

回答

4

編輯:Remus是正確的,這隻會在查詢計劃第一次觸及緩存時帶出編譯版本,而不是後續運行。

您應該能夠從查詢計劃中獲取參數,因爲它包含使用的最後一個參數。改變你的代碼:

select * 
from sys.dm_exec_requests r 
cross apply sys.dm_exec_query_plan(plan_handle) as qp 
cross apply sys.dm_exec_sql_text(r.sql_handle) 
where r.database_id = DB_ID('<dbname>') 

你會發現查詢計劃query_plan的最後一欄,查詢計劃,您可以手動檢查的XML版本,在XML的底部是參數,或者如果你喜歡使用XML解析和XQuery來提取參數列表標籤

+4

我認爲這些是在計劃生成期間嗅探的參數,而不是最後使用的參數。 – 2010-03-24 17:45:12

+0

你的權利,這使得這是一個母馬,因爲我沒有看到其他的DMV,記錄了簡單/強制參數化對聲明做了什麼 – Andrew 2010-03-24 19:00:40