Как получить значения параметров для DM exec sql text

Я запускаю следующую инструкцию, чтобы узнать, какие запросы выполняются в sql server:

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

есть ли способ получить значения параметров, которые оператор использует? Скажем, присоединившись к другому столу?

1 ответов


Edit: 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, чтобы вытащить теги ParameterList