fn_get_sql (Transact-SQL)

Restituisce il testo dell'istruzione SQL per l'handle SQL specificato.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

ms189451.note(it-it,SQL.90).gifImportante:
Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare sys.dm_exec_sql_text in alternativa. Per ulteriori informazioni, vedere sys.dm_exec_sql_text.

Sintassi

fn_get_sql ( SqlHandle )

Argomenti

SqlHandle

Valore dell'handle. SqlHandle è di tipo varbinary(64) e non prevede alcun valore predefinito.

Tabelle restituite

Nome colonna Tipo di dati Descrizione

dbid

smallint

ID del database. Per istruzioni SQL ad hoc viene restituito NULL.

objectid

int

ID dell'oggetto di database. Per istruzioni SQL ad hoc viene restituito NULL.

number

smallint

Specifica il numero del gruppo, se le procedure sono raggruppate.

0 = Le voci immesse non sono procedure.

NULL = Istruzioni SQL ad hoc.

encrypted

bit

Specifica se l'oggetto è crittografato.

0 = Non crittografato

1 = Crittografato

text

text

Testo dell'istruzione SQL. Per gli oggetti crittografati viene restituito NULL.

Osservazioni

È possibile ottenere un handle SQL valido dalla colonna sql_handle della vista a gestione dinamica sys.dm_exec_requests.

Se si passa un handle che non è più presente nella cache, fn_get_sql restituisce un set di risultati vuoto. Se si passa un handle non valido, il batch viene interrotto e viene visualizzato un messaggio di errore.

Microsoft Motore di database di SQL Server 2005 non consente di memorizzare nella cache alcune istruzioni Transact-SQL, ad esempio istruzioni per la copia di massa e istruzioni con valori letterali stringa di dimensioni superiori a 8 KB. Gli handle relativi a tali istruzioni non possono essere recuperati tramite fn_get_sql.

La colonna text del set di risultati viene filtrata per escludere elementi di testo che potrebbe includere password. Per ulteriori informazioni sulle stored procedure correlate alla protezione che non vengono monitorate, vedere Filtraggio di una traccia.

La funzione fn_get_sql restituisce informazioni simili a quelle del comando DBCC INPUTBUFFER. Di seguito sono riportati due esempi di situazioni in cui è possibile utilizzare fn_get_sql e non DBCC INPUTBUFFER:

  • Quando gli eventi includono più di 255 caratteri.
  • Quando è necessario ottenere il livello di nidificazione massimo corrente di una stored procedure. Si supponga, ad esempio, che esistano due stored procedure denominate sp_1 e sp_2. Se sp_1 chiama sp_2 e si ottiene l'handle dalla vista a gestione dinamica sys.dm_exec_requests mentre sp_2 è in esecuzione, la funzione fn_get_sql restituirà informazioni su sp_2. Inoltre, la funzione fn_get_sql restituisce il testo completo della stored procedure al livello di nidificazione massimo corrente.

Autorizzazioni

L'utente deve disporre dell'autorizzazione VIEW SERVER STATE nel server.

Esempi

Gli amministratori del database possono utilizzare la funzione fn_get_sql, come illustrato nell'esempio seguente, per individuare processi che causano problemi. Dopo avere identificato un valore session_id che causa problemi, l'amministratore può recuperare l'handle SQL di tale session_id, chiamare la funzione fn_get_sql con tale handle e utilizzare l'offset iniziale e finale per determinare il testo SQL del valore session_id che crea problemi.

DECLARE @Handle varbinary(64);SELECT @Handle = sql_handle FROM sys.dm_exec_requests WHERE session_id = 52 and request_id = 0;SELECT * FROM ::fn_get_sql(@Handle);GO

Vedere anche

Riferimento

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005