sys.dm_exec_sql_text

Actualizado: 12 de diciembre de 2006

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)

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

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, vea 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.

Notas

En lotes, los identificadores de SQL son valores de hash basados en el texto SQL. En objetos de base de datos, como procedimientos almacenados, desencadenadores o funciones, los identificadores de SQL se derivan del Id. de la base de datos, el Id. del objeto y el número del objeto.

Permisos

Requiere el permiso VIEW SERVER STATE en el servidor.

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

Referencia

Funciones y vistas de administración dinámica
Funciones y vistas de administración dinámica relacionadas con ejecuciones
sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido modificado:
  • Se ha actualizado la descripción de sql_handle.
  • Se ha agregado que las instrucciones preparadas devolverán NULL en las columnas dbid, objectid y number.

14 de abril de 2006

Contenido modificado:
  • Se han actualizado las descripciones para que las columnas devueltas incluyan definiciones con valor NULL.
  • Se han corregido los ejemplos.

5 de diciembre de 2005

Contenido modificado:
  • Se ha cambiado el tipo de datos del campo text de text a nvarchar(max).