sys.fn_get_sql (Transact-SQL)
S'applique à : SQL Server
Renvoie le texte de l'instruction SQL pour le handle SQL spécifié.
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez sys.dm_exec_sql_text à la place. Pour plus d’informations, consultez sys.dm_exec_sql_text (Transact-SQL).
Conventions de la syntaxe Transact-SQL
Syntaxe
sys.fn_get_sql ( SqlHandle )
Arguments
SqlHandle
Valeur du handle. SqlHandle est varbinary(64) sans valeur par défaut.
Tables retournées
Nom de la colonne | Type de données | Description |
---|---|---|
dbid | smallint | ID de la base de données. Pour les instructions SQL ad hoc et préparées, l'ID de la base de données où les instructions ont été compilées. |
objectid | int | Identificateur de l'objet de base de données. NULL pour les instructions SQL ad hoc. |
nombre | smallint | Indique le numéro du groupe, si les procédures sont groupées. 0 = les entrées ne sont pas des procédures. NULL = instructions SQL ad hoc. |
chiffré | bit | Indique si l'objet est chiffré. 0 = Non chiffrée 1 = Chiffrée |
texte | texte | Texte de l'instruction SQL. NULL pour les objets chiffrés. |
Notes
Vous pouvez obtenir un handle SQL valide à partir de la colonne sql_handle de la vue de gestion dynamique Transact-SQL (sys.dm_exec_requests Transact-SQL).
Si vous passez un handle qui n’existe plus dans le cache, fn_get_sql retourne un jeu de résultats vide. Si vous passez un handle qui n'est pas valide, le lot s'arrête et un message d'erreur s'affiche.
SQL Server Moteur de base de données ne peut pas mettre en cache certaines instructions Transact-SQL, telles que les instructions de copie en bloc et les instructions avec des littéraux de chaîne dont la taille est supérieure à 8 Ko. Les handles de ces instructions ne peuvent pas être récupérés avec fn_get_sql.
La colonne de texte du jeu de résultats est filtrée pour le texte qui peut contenir des mots de passe. Pour plus d’informations sur les procédures stockées liées à la sécurité qui ne sont pas surveillées, consultez Filtrer une trace.
La fonction fn_get_sql retourne des informations similaires à la commande DBCC INPUTBUFFER . Les exemples suivants montrent quand vous pouvez utiliser la fonction fn_get_sql parce que DBCC INPUTBUFFER ne peut pas l'être :
lorsque des événements contiennent plus de 255 caractères ;
lorsque vous devez renvoyer le niveau d'imbrication actuel le plus élevé d'une procédure stockée. Imaginons par exemple deux procédures stockées appelées sp_1 et sp_2. Si sp_1 appelle sp_2 et que vous obtenez le handle de la vue de gestion dynamique sys.dm_exec_requests alors que sp_2 est en cours d'exécution, la fonction fn_get_sql renvoie des informations sur sp_2. En outre, la fonction fn_get_sql renvoie le texte complet de la procédure stockée au niveau d'imbrication actuel le plus élevé.
autorisations
L’utilisateur a besoin de l’autorisation VIEW SERVER STATE sur le serveur.
Exemples
Les administrateurs de base de données peuvent utiliser la fonction fn_get_sql, comme indiqué dans l'exemple suivant pour diagnostiquer les problèmes de traitement. Lorsque l'administrateur identifie un ID de session problématique, il peut récupérer le handle SQL de cette session, appeler fn_get_sql avec le handle, puis utiliser les décalages de début et de fin pour déterminer le texte SQL de l'ID de session problématique.
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
Voir aussi
DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)