sys.dm_exec_sql_text

Mis à jour : 12 décembre 2006

Retourne le texte du lot SQL qui est identifié par la fonction sql_handle spécifiée. Cette fonction à valeur de table remplace la fonction système fn_get_sql.

Syntaxe

sys.dm_exec_sql_text(sql_handle)

Arguments

  • sql_handle
    Handle SQL du lot à rechercher. sql_handle est de type varbinary(64). sql_handle peut être obtenu à partir des objets de gestion dynamique suivants :

    • sys.dm_exec_query_stats
    • sys.dm_exec_requests
    • sys.dm_exec_cursors
    • sys.dm_exec_xml_handles
    • sys.dm_exec_query_memory_grants

Table retournée

Nom de colonne Type de données Description

dbid

smallint

ID de la base de données.

Est NULL pour les instructions SQL ad hoc et préparées.

objectid

int

ID de l'objet.

Est NULL pour les instructions SQL ad hoc et préparées.

number

smallint

Pour une procédure stockée numérotée, cette colonne retourne le numéro de la procédure stockée. Pour plus d'informations, consultez sys.numbered_procedures (Transact-SQL).

Est NULL pour les instructions SQL ad hoc et préparées.

encrypted

bit

1 = le texte SQL est chiffré.

0 = le texte SQL n'est pas chiffré.

text

nvarchar(max)

Texte de la requête SQL.

NULL pour les objets chiffrés.

Notes

Pour les lots, les handles SQL sont des valeurs de hachage fondées sur le texte SQL. Pour des objets de base de données tels que des procédures stockées, des déclencheurs ou des fonctions, les handles SQL sont dérivés de l'ID de la base de données, de l'ID de l'objet et du numéro de l'objet.

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Exemples

A. Obtention d'informations sur les cinq premières requêtes d'après le temps processeur moyen

L'exemple suivant retourne le texte de l'instruction SQL et le temps processeur moyen pour les cinq premières requêtes.

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. Obtention de statistiques d'exécution des lots

L'exemple suivant retourne le texte des requêtes SQL qui sont exécutées par lots et fournit des informations statistiques à leur sujet.

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;

Voir aussi

Référence

Fonctions et vues de gestion dynamique
Fonctions et vues de gestion dynamique liées à l'exécution
sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Contenu modifié :
  • Mis à jour de la description de sql_handle.
  • La précision selon laquelle les instructions préparées retournent une valeur NULL dans les colonnes dbid, objectid, et number a été ajoutée.

14 avril 2006

Contenu modifié :
  • Mise à jour de la description des colonnes retournées pour ajouter des précisions sur la valeur NULL.
  • Correction des exemples.

5 décembre 2005

Contenu modifié :
  • Le type de données du champ text a été modifié : il est passé de text à nvarchar(max).