sys.dm_exec_sql_text (Transact-SQL)sys.dm_exec_sql_text (Transact-SQL)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne le texte de l’instruction SQL du lot qui est identifié par l’objet sql_handle.Returns the text of the SQL batch that is identified by the specified sql_handle. Cette fonction remplace la fonction système fn_get_sql.This table-valued function replaces the system function fn_get_sql.

SyntaxeSyntax

sys.dm_exec_sql_text(sql_handle | plan_handle)  

ArgumentsArguments

sql_handlesql_handle
Handle SQL du lot à rechercher.Is the SQL handle of the batch to be looked up. sql_handle est varbinary(64).sql_handle is varbinary(64). sql_handle peut être obtenu à partir des objets de gestion dynamique suivants :sql_handle can be obtained from the following dynamic management objects:

plan_handleplan_handle
Identifie de façon univoque un plan de requête pour un traitement en cache ou en cours d'exécution.Uniquely identifies a query plan for a batch that is cached or is currently executing. plan_handle est varbinary(64).plan_handle is varbinary(64). plan_handle peut être obtenu à partir des objets de gestion dynamique suivants :plan_handle can be obtained from the following dynamic management objects:

Table retournéeTable Returned

Nom de colonneColumn name Type de donnéesData type DescriptionDescription
dbiddbid smallintsmallint ID de base de données.ID of database.

Pour les instructions SQL ad hoc et préparées, l'ID de la base de données où les instructions ont été compilées.For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.
ObjectIDobjectid intint ID d’objet.ID of object.

Est NULL pour les instructions SQL ad hoc et préparées.Is NULL for ad hoc and prepared SQL statements.
nombrenumber smallintsmallint Pour une procédure stockée numérotée, cette colonne retourne le numéro de la procédure stockée.For a numbered stored procedure, this column returns the number of the stored procedure. Pour plus d’informations, consultez fonctionnalité sys.numbered_procedures ( Transact-SQL ) .For more information, see sys.numbered_procedures (Transact-SQL).

Est NULL pour les instructions SQL ad hoc et préparées.Is NULL for ad hoc and prepared SQL statements.
chiffréencrypted bitbit 1 = le texte SQL est chiffré.1 = SQL text is encrypted.

0 = le texte SQL n'est pas chiffré.0 = SQL text is not encrypted.
texttext nvarchar (max )nvarchar(max ) Texte de la requête SQL.Text of the SQL query.

NULL pour les objets chiffrés.Is NULL for encrypted objects.

PermissionsPermissions

requièrent l'autorisation VIEW SERVER STATE sur le serveur.Requires VIEW SERVER STATE permission on the server.

NotesRemarks

Pour les requêtes ad hoc, les handles SQL sont des valeurs de hachage en fonction du texte SQL qui est envoyé au serveur et peuvent provenir d’une base de données.For ad hoc queries, the SQL handles are hash values based on the SQL text being submitted to the server, and can originate from any database.

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.For database objects such as stored procedures, triggers or functions, the SQL handles are derived from the database ID, object ID, and object number.

Descripteur de plan est une valeur de hachage dérivée du plan compilé du lot entier.Plan handle is a hash value derived from the compiled plan of the entire batch.

Note

dbid ne peut pas être déterminé à partir de sql_handle pour les requêtes ad hoc.dbid cannot be determined from sql_handle for ad hoc queries. Pour déterminer dbid pour les requêtes ad hoc, utilisez plan_handle à la place.To determine dbid for ad hoc queries, use plan_handle instead.

ExemplesExamples

A.A. Exemple conceptuelConceptual Example

Voici un exemple pour illustrer le passage de base un sql_handle soit directement, soit via CROSS APPLY.The following is a basic example to illustrate passing a sql_handle either directly or with CROSS APPLY.

  1. Créer l’activité.Create activity.
    Exécutez le code T-SQL suivant dans une nouvelle fenêtre de requête dans SQL Server Management StudioSQL Server Management Studio.Execute the following T-SQL in a new query window in SQL Server Management StudioSQL Server Management Studio.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
    1. À l’aide de CROSS APPLY.Using CROSS APPLY.
      La colonne sql_handle de sys.dm_exec_requests seront passés à sys.dm_exec_sql_text à l’aide de CROSS APPLY.The sql_handle from sys.dm_exec_requests will be passed to sys.dm_exec_sql_text using CROSS APPLY. Ouvrez une nouvelle fenêtre de requête et passer le spid identifié à l’étape 1.Open a new query window and pass the spid identified in step 1. Dans cet exemple, le spid se trouve être 59.In this example the spid happens to be 59.

      SELECT t.*
      FROM sys.dm_exec_requests AS r
      CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
      WHERE session_id = 59 -- modify this value with your actual spid
      
    2. Passage sql_handle directement.Passing sql_handle directly.
      Acquérir le sql_handle de sys.dm_exec_requests.Acquire the sql_handle from sys.dm_exec_requests. Ensuite, passez le sql_handle directement à sys.dm_exec_sql_text.Then, pass the sql_handle directly to sys.dm_exec_sql_text. Ouvrez une nouvelle fenêtre de requête et de passer le spid identifié à l’étape 1 pour sys.dm_exec_requests.Open a new query window and pass the spid identified in step 1 to sys.dm_exec_requests. Dans cet exemple, le spid se trouve être 59.In this example the spid happens to be 59. Passez ensuite retourné sql_handle en tant qu’argument à sys.dm_exec_sql_text.Then pass the returned sql_handle as an argument to sys.dm_exec_sql_text.

      -- acquire sql_handle
      SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59  -- modify this value with your actual spid
      
      -- pass sql_handle to sys.dm_exec_sql_text
      SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
      

B.B. Obtenir des informations sur les cinq premières requêtes par temps processeur moyenObtain information about the top five queries by average CPU time

L'exemple suivant retourne le texte de l'instruction SQL et le temps processeur moyen pour les cinq premières requêtes.The following example returns the text of the SQL statement and average CPU time for the top five queries.

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;  

C.C. Fournir des statistiques d’exécution du lotProvide batch-execution statistics

L'exemple suivant retourne le texte des requêtes SQL qui sont exécutées par traitements et fournit des informations statistiques à leur sujet.The following example returns the text of SQL queries that are being executed in batches and provides statistical information about them.

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 aussiSee also

Fonctions et vues de gestion dynamique (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Les fonctions et vues de gestion dynamique ( liées à l’exécution Transact-SQL ) Execution Related Dynamic Management Views and Functions (Transact-SQL)
Sys.dm_exec_query_stats ( Transact-SQL ) sys.dm_exec_query_stats (Transact-SQL)
Sys.dm_exec_requests ( Transact-SQL ) sys.dm_exec_requests (Transact-SQL)
Sys.dm_exec_cursors ( Transact-SQL ) sys.dm_exec_cursors (Transact-SQL)
Sys.dm_exec_xml_handles ( Transact-SQL ) sys.dm_exec_xml_handles (Transact-SQL)
Sys.dm_exec_query_memory_grants ( Transact-SQL ) sys.dm_exec_query_memory_grants (Transact-SQL)
À l’aide d’appliquer Using APPLY
Sys.dm_exec_text_query_plan ( Transact-SQL )sys.dm_exec_text_query_plan (Transact-SQL)