2010-03-24 18 views
9

estoy ejecutando la siguiente instrucción para ver qué consultas se ejecutan en el servidor SQL:¿Cómo obtener valores de parámetros para 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>') 

el texto SQL que regresa es parametrizada:

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

¿Hay alguna forma de obtener los valores para los parámetros que usa la declaración? Digamos al unirme a otra mesa, tal vez?

+0

Un poco más de trabajo para obtenerlo de esa manera, pero funciona si tengo que tenerlo. ¡Gracias! –

+1

¿Alguna vez descubrió una solución para esto? La respuesta aceptada no parece funcionar ... –

Respuesta

4

Editar: Remus es correcto, esto solo sacará a la luz las versiones compiladas la primera vez que el plan de consulta golpeó la memoria caché, no ejecuciones subsiguientes.

Debe poder obtener los parámetros del plan de consulta, ya que contiene los últimos parámetros utilizados. La alteración de su código:

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>') 

Usted encontrará la última columna del plan de consulta es query_plan, una versión XML del plan de consulta que se puede inspeccionar manualmente, en la parte inferior del XML son los parámetros, o si el reto es utilizar el análisis XML y XQuery para extraer las etiquetas ParameterList

+4

Creo que esos son los parámetros olfateados durante la generación del plan, no los últimos utilizados. –

+0

Su derecho, eso hace que esto sea una yegua ya que no veo otro DMV que dé un registro de lo que la parametrización simple/forzada ha hecho al enunciado – Andrew

Cuestiones relacionadas