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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retorna o texto do SQL em lote que é identificado pelo especificado sql_handle.Returns the text of the SQL batch that is identified by the specified sql_handle. Essa função com valor de tabela substitui a função de sistema fn_get_sql.This table-valued function replaces the system function fn_get_sql.

SintaxeSyntax

sys.dm_exec_sql_text(sql_handle | plan_handle)  

ArgumentosArguments

sql_handlesql_handle
É o identificador SQL do lote a ser pesquisado.Is the SQL handle of the batch to be looked up. sql_handle é varbinary(64).sql_handle is varbinary(64). sql_handle pode ser obtido dos seguintes objetos de gerenciamento dinâmico:sql_handle can be obtained from the following dynamic management objects:

plan_handleplan_handle
Identifica exclusivamente um plano de consulta para um lote em cache ou sendo executado atualmente.Uniquely identifies a query plan for a batch that is cached or is currently executing. plan_handle é varbinary(64).plan_handle is varbinary(64). plan_handle pode ser obtido dos seguintes objetos de gerenciamento dinâmico:plan_handle can be obtained from the following dynamic management objects:

Tabela retornadaTable Returned

Nome da colunaColumn name Tipo de dadosData type DescriptionDescription
dbiddbid smallintsmallint ID do banco de dados.ID of database.

Para instruções SQL preparadas e ad hoc, a ID do banco de dados no qual as instruções foram compiladas.For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.
objectidobjectid Intint ID do objeto.ID of object.

É NULL para instruções SQL ad hoc e preparadas.Is NULL for ad hoc and prepared SQL statements.
numbernumber smallintsmallint Para um procedimento armazenado numerado, esta coluna retorna o número do procedimento armazenado.For a numbered stored procedure, this column returns the number of the stored procedure. Para obter mais informações, consulte numbered_procedures (Transact-SQL).For more information, see sys.numbered_procedures (Transact-SQL).

É NULL para instruções SQL ad hoc e preparadas.Is NULL for ad hoc and prepared SQL statements.
Criptografadoencrypted bitbit 1 = O texto SQL é criptografado.1 = SQL text is encrypted.

0 = O texto SQL não é criptografado.0 = SQL text is not encrypted.
texttext nvarchar(max )nvarchar(max ) Texto da consulta SQL.Text of the SQL query.

É NULL para objetos criptografados.Is NULL for encrypted objects.

PermissõesPermissions

Requer a permissão VIEW SERVER STATE no servidor.Requires VIEW SERVER STATE permission on the server.

RemarksRemarks

Para consultas ad hoc, os identificadores SQL são valores de hash com base no texto SQL que está sendo enviado ao servidor e podem se originar de qualquer banco de dados.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.

Para objetos de banco de dados como procedimentos armazenados, gatilhos ou funções, os identificadores SQL são derivados da ID de banco de dados, da ID de objeto e do número de objeto.For database objects such as stored procedures, triggers or functions, the SQL handles are derived from the database ID, object ID, and object number.

Identificador de plano é um valor de hash derivado do plano compilado do lote inteiro.Plan handle is a hash value derived from the compiled plan of the entire batch.

Observação

DBID não pode ser determinada sql_handle para consultas ad hoc.dbid cannot be determined from sql_handle for ad hoc queries. Para determinar dbid para consultas ad hoc, use plan_handle em vez disso.To determine dbid for ad hoc queries, use plan_handle instead.

ExemplosExamples

A.A. Exemplo conceitualConceptual Example

A seguir está um exemplo básico para ilustrar passando um sql_handle diretamente ou com CROSS APPLY.The following is a basic example to illustrate passing a sql_handle either directly or with CROSS APPLY.

  1. Crie uma atividade.Create activity.
    Execute o T-SQL a seguir em uma nova janela de consulta em 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. Usando CROSS APPLY.Using CROSS APPLY.
      O sql_handle do exec_requests será passado para dm_exec_sql_text usando CROSS APPLY.The sql_handle from sys.dm_exec_requests will be passed to sys.dm_exec_sql_text using CROSS APPLY. Abra uma nova janela de consulta e passar o spid identificado na etapa 1.Open a new query window and pass the spid identified in step 1. Neste exemplo, o spid é 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. Passando sql_handle diretamente.Passing sql_handle directly.
      Adquirir o sql_handle de exec_requests.Acquire the sql_handle from sys.dm_exec_requests. Em seguida, passe o sql_handle diretamente para dm_exec_sql_text.Then, pass the sql_handle directly to sys.dm_exec_sql_text. Abra uma nova janela de consulta e passar o spid identificado na etapa 1 para exec_requests.Open a new query window and pass the spid identified in step 1 to sys.dm_exec_requests. Neste exemplo, o spid é 59.In this example the spid happens to be 59. Em seguida, passe retornado sql_handle como um argumento para 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. Obter informações sobre as cinco principais consultas por tempo médio de CPUObtain information about the top five queries by average CPU time

O exemplo a seguir retorna o texto da instrução SQL e o tempo médio de CPU das cinco primeiras consultas.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. Fornecem estatísticas de execução em lotesProvide batch-execution statistics

O exemplo a seguir retorna o texto de consultas SQL que estão sendo executadas em lotes e fornece informações estatísticas sobre elas.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;  

Consulte tambémSee also

Exibições e funções de gerenciamento dinâmico (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Funções e exibições de gerenciamento dinâmico relacionadas à execução (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)
Usando APPLY Using APPLY
sys.dm_exec_text_query_plan (Transact-SQL)sys.dm_exec_text_query_plan (Transact-SQL)