2011-06-27 32 views
12

Estoy solucionando una aplicación que utiliza una base de datos de SQL Server y estoy viendo muchas llamadas sp_execute.Ver SQL preparado con sp_prepare

Parece que no puedo encontrar las llamadas sp_prepare.

¿Cómo se pueden inspeccionar todas las declaraciones SQL preparadas en la memoria?

+0

¿Está utilizando realmente el Analizador de SQL? – Rodrigo

+0

Sería [un estado de cosas normal/deseable] (http://www.sql-server-performance.com/forum/threads/sp_prepare-and-sp_execute.14685/) tener muchas más llamadas 'sp_execute' en los archivos de rastreo que las llamadas 'sp_prepare'. En cuanto a encontrar el SQL (parametrizado) vinculado a los identificadores preparados, consultaría los esquemas de las tablas del sistema de SQL Server para las columnas denominadas clases de cosas con las que se denomina "manejar" o "plan de consulta". – hardmath

Respuesta

2

Siguiendo con mi comentario anterior, me encontré con una serie de enlaces de interés:

How can I find out what command sp_execute is running (without using Profiler)

SP_EXECUTE executing... what?

See the query in sp_execute

Microsoft tiene documentación, pero Él quizá un de empalme desafiante cosas juntas (como siempre). Si se conoce el identificador del plan, puede utilizar esto:

sys.dm_exec_sql_text (Transact-SQL)

Esta es una función con valores de tabla. Puede ver a blog article here que explota tales funciones con valores de tabla para recuperar dependencias de objeto para un identificador válido de un plan compilado (preparado).

13

Estaba buscando una forma de ver las sentencias SQL reales ejecutadas por sp_execute en SQL Server 2008 R2 Profiler.

Para hacer esto, creé una nueva traza y hice clic en la pestaña "Selección de eventos". Seleccioné "Mostrar todos los eventos" y comprobé los procedimientos almacenados> SP: StmtCompleted. Al ejecutar la traza, pude ver las declaraciones SQL reales.

4

Me encontré con este problema también. El Analizador de SQL no estaba capturando la declaración sp_prepare porque ocurrió antes de que el rastreo del Analizador de SQL comenzara a ejecutarse. Las diversas publicaciones que se basan en sys.dm_exec_sql_text no ayudaron porque no pude encontrar el valor correcto sql_handle o plan_handle para proporcionar ese procedimiento almacenado.

he encontrado una solución de this blog post: Analizador de SQL, haga clic en el "Mostrar todos los eventos" casilla de verificación y luego en el epígrafe "procedimientos almacenados" la partida elegir "SP: CacheHit".

En la salida del Analizador de SQL resultante, verá un "SP: CacheHit" fila que contiene la instrucción SQL en caché cerca de su "RPC: Starting ... sp_execute" comunicado.

A continuación, puede reconstruir y volver a ejecutar la instrucción SQL completa en SSMS si usted desea usando:

exec sp_executesql @stmt=N'{statement from SP:CacheHit}', 
    @params=N'{parameter declaration from SP:CacheHit}', 
    @param1={value}, {...parameters from RPC:Starting sp_execute statement} 
Cuestiones relacionadas