sys.fn_get_sql (Transact-SQL)
Si applica a: SQL Server
Restituisce il testo dell'istruzione SQL per l'handle SQL specificato.
Importante
Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di usare 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. Per altre informazioni, vedere sys.dm_exec_sql_text (Transact-SQL).
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sys.fn_get_sql ( SqlHandle )
Argomenti
SqlHandle
Valore dell'handle. SqlHandle è varbinary(64) senza impostazione predefinita.
Tabelle restituite
Nome 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 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. |
crittografato | bit | Specifica se l'oggetto è crittografato. 0 = Non crittografato 1 = Crittografato |
Testo | Testo | 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 (Transact-SQL).
Se si passa un handle che non esiste più nella cache, fn_get_sql restituisce un set di risultati vuoto. Se si passa un handle non valido, il batch viene arrestato e viene visualizzato un messaggio di errore.
Sql Server motore di database non può memorizzare nella cache alcune istruzioni Transact-SQL, ad esempio istruzioni di copia bulk 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 di testo del set di risultati viene filtrata per il testo che può contenere password. Per altre informazioni sulle stored procedure correlate alla sicurezza non monitorate, vedere Filtrare una traccia.
La funzione fn_get_sql restituisce informazioni simili al 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 ID di sessione che causa problemi, l'amministratore può recuperare l'handle SQL di tale sessione, chiamare la funzione fn_get_sql con tale handle e quindi utilizzare l'offset iniziale e quello finale per determinare il testo SQL dell'ID di sessione 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 sys.fn_get_sql(@Handle);
GO
Vedi anche
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)