Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Devolve o texto do lote SQL que é identificado pelo sql_handle especificado. Esta função com valores de tabela substitui a função do sistema fn_get_sql.
Sintaxe
sys.dm_exec_sql_text(sql_handle | plan_handle)
Arguments
sql_handle
É um token que identifica de forma única um lote que foi executado ou está atualmente a executar.
sql_handle é varbinary(64).
A sql_handle pode ser obtida a partir dos seguintes objetos de gestão dinâmica:
plan_handle
É um token que identifica de forma única um plano de execução de consulta para um lote que foi executado e cujo plano reside na cache do plano, ou que está atualmente a ser executado.
plan_handle é varbinary(64).
O plan_handle pode ser obtido a partir dos seguintes objetos de gerenciamento dinâmico:
Tabela retornada
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| dbid | smallint | ID da base de dados. Para SQL estático num procedimento armazenado, o ID da base de dados que contém o procedimento armazenado. Nulo caso contrário. |
| Objectid | int | ID do objeto. É NULL para instruções SQL ad hoc e preparadas. |
| number | smallint | Para um procedimento armazenado numerado, esta coluna devolve o número do procedimento armazenado. Para mais informações, consulte sys.numbered_procedures (Transact-SQL). É NULL para instruções SQL ad hoc e preparadas. |
| encriptado | bit | 1 = O texto SQL é encriptado. 0 = O texto SQL não está encriptado. |
| texto | nvarchar(max) | Texto da consulta SQL. É NULL para objetos encriptados. |
Permissions
Requer VIEW SERVER STATE permissão no servidor.
Permissões para SQL Server 2022 e posterior
Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Observações
Para consultas ad hoc, os handles SQL são valores de hash baseados no texto SQL submetido ao servidor, podendo originar-se de qualquer base de dados.
Para objetos de base de dados como procedimentos armazenados, triggers ou funções, os handles SQL são derivados do ID da base de dados, ID do objeto e número do objeto.
O handle de plano é um valor de hash derivado do plano compilado de todo o lote.
Observação
O dbid não pode ser determinado a partir de sql_handle para consultas ad hoc. Para determinar dbid para consultas ad hoc, use plan_handle em vez disso.
Examples
A. Exemplo Conceptual
Segue-se um exemplo básico para ilustrar a passagem de um sql_handle diretamente ou com CROSS APPLY.
Crie atividade.
Execute o seguinte T-SQL numa nova janela de consulta no SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Usar CROSS APPLY.
O sql_handle de sys.dm_exec_requests será passado para sys.dm_exec_sql_text usando CROSS APPLY. Abra uma nova janela de consulta e passe o spid identificado no passo 1. Neste exemplo, o spid é .59SELECT 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 spidPassando sql_handle diretamente.
Adquira a sql_handlede sys.dm_exec_requests. Depois, passa o sql_handle diretamente ao sys.dm_exec_sql_text. Abra uma nova janela de consulta e passe o spid identificado no passo 1 para sys.dm_exec_requests. Neste exemplo, o spid é .59Depois passa o sql_handle devolvido como argumento para 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. Obtenha informações sobre as cinco principais consultas por tempo médio de CPU
O exemplo seguinte devolve o texto da instrução SQL e o tempo médio de CPU para as cinco consultas principais.
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. Fornecer estatísticas de execução em lote
O exemplo seguinte devolve o texto das consultas SQL que estão a ser executadas em lotes e fornece informação estatística sobre elas.
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ém
Visualizações e funções de gerenciamento dinâmico (Transact-SQL)
Visualizações e funções de gerenciamento dinâmico relacionadas à execução (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)
sys.dm_exec_xml_handles (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)
Utilização do APPLY
sys.dm_exec_text_query_plan (Transact-SQL)