Esporta (0) Stampa
Espandi tutto

sys.dm_exec_sql_text

Aggiornamento: aprile 2011

Questo argomento è OBSOLETO. La versione più recente è disponibile in Guida di riferimento a Transact-SQL 14.

ImportantImportante
Argomento non aggiornato. Per la versione corrente, vedere sys.dm_exec_sql_text.

Restituisce il testo del batch SQL identificato dall'oggetto sql_handle specificato. Questa funzione con valori di tabella sostituisce la funzione di sistema fn_get_sql.


sys.dm_exec_sql_text(sql_handle | plan_handle)

sql_handle
Handle SQL del batch da cercare. sql_handle è di tipo varbinary(64). È possibile ottenere sql_handle dagli oggetti a gestione dinamica seguenti:

  • sys.dm_exec_query_stats

  • sys.dm_exec_requests

  • sys.dm_exec_cursors

  • sys.dm_exec_xml_handles

  • sys.dm_exec_query_memory_grants

  • sys.dm_exec_connections

plan_handle
Identificatore del piano di query.

Per ulteriori informazioni, vedere sys.dm_exec_text_query_plan.

 

Nome della colonna Tipo di dati Descrizione

dbid

smallint

ID del database.

Per istruzioni SQL ad hoc e preparate, l'ID del database in cui sono state compilate le istruzioni.

objectid

int

ID dell'oggetto.

Per istruzioni SQL ad hoc e preparate viene restituito NULL.

number

smallint

Per una stored procedure numerata, questa colonna restituisce il numero della stored procedure. Per ulteriori informazioni, vedere sys.dm_exec_query_memory_grants.

Per istruzioni SQL ad hoc e preparate viene restituito NULL.

encrypted

bit

1 = Il testo SQL è crittografato.

0 = Il testo SQL non è crittografato.

text

nvarchar(max )

Testo della query SQL.

Per gli oggetti crittografati viene restituito NULL.

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Per i batch gli handle SQL sono valori basati sul testo SQL. Per alcuni oggetti di database, ad esempio stored procedure, trigger o funzioni, gli handle SQL sono derivati dall'ID di database e dall'ID e dal numero dell'oggetto. plan_handle è un valore hash derivato dal piano compilato dell'intero batch.

Nell'esempio seguente vengono restituiti il testo dell'istruzione SQL e il tempo medio di CPU per le prime cinque query.

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;

Nell'esempio seguente viene restituito il testo delle query SQL eseguite in batch e vengono visualizzate le relative informazioni statistiche.

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;

Mostra:
© 2014 Microsoft