sys.dm_exec_sql_text (Transact-SQL)
Devuelve el texto del lote SQL que se identifica mediante el valor sql_handle especificado. Esta función con valores de tabla reemplaza a la función del sistema fn_get_sql.
Sintaxis
sys.dm_exec_sql_text(sql_handle | plan_handle)
Argumentos
sql_handle
Es el identificador SQL del lote que se va a buscar. sql_handle es de tipo varbinary(64). sql_handle se puede obtener de los siguientes objetos de administración dinámica:sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants
sys.dm_exec_connections
plan_handle
Es el identificador del plan de consulta.Para obtener más información, vea sys.dm_exec_text_query_plan (Transact-SQL).
Tabla devuelta
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
dbid |
smallint |
Id. de la base de datos. Este valor es NULL para las instrucciones SQL ad hoc y preparadas. |
objectid |
int |
Id. del objeto. Este valor es NULL para las instrucciones SQL ad hoc y preparadas. |
number |
smallint |
En un procedimiento almacenado numerado, esta columna devuelve el número del procedimiento almacenado. Para obtener más información, consulte sys.numbered_procedures (Transact-SQL). Este valor es NULL para las instrucciones SQL ad hoc y preparadas. |
encrypted |
bit |
1 = El texto SQL está cifrado. 0 = El texto SQL no está cifrado. |
text |
nvarchar(max) |
Texto de la consulta de SQL. Este valor es NULL para objetos cifrados. |
Permisos
Requiere el permiso VIEW SERVER STATE en el servidor.
Comentarios
En lotes, los identificadores de SQL son valores de hash basados en el texto SQL. Para los objetos de base de datos, como procedimientos almacenados, desencadenadores o funciones, los identificadores SQL se derivan del identificador de base de datos, del identificador de objeto y del número de objeto. plan_handle es un valor hash derivado del plan compilado del lote completo.
Ejemplos
A. Obtener información sobre las cinco mejores consultas por promedio de tiempo de CPU
El ejemplo siguiente devuelve el texto de la instrucción SQL y el promedio de tiempo de CPU de las cinco mejores consultas.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
B. Proporcionar estadísticas de ejecución de lotes
El ejemplo siguiente devuelve el texto de consultas SQL que se están ejecutando por lotes y proporciona información estadística sobre ellas.
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
Vea también