Cette documentation est archivée et n’est pas conservée.

fn_get_sql (Transact-SQL)

Renvoie le texte de l'instruction SQL pour le handle SQL spécifié.

Icône Lien de rubrique Conventions de la syntaxe de Transact-SQL

ms189451.note(fr-fr,SQL.90).gifImportant :
Cette fonction sera supprimée dans les prochaines versions de Microsoft SQL Server. Évitez d'utiliser cette fonction dans un nouveau travail de développement et modifiez les applications qui l'utilisent actuellement. Utilisez sys.dm_exec_sql_text à la place. Pour plus d'informations, consultez sys.dm_exec_sql_text.


fn_get_sql ( SqlHandle )

SqlHandle

Valeur du handle. L'argument SqlHandle est de type varbinary(64), sans valeur par défaut.

Vous pouvez obtenir un handle SQL valide de la colonne sql_handle de la vue de gestion dynamique sys.dm_exec_requests.

Si vous transmettez un handle qui n'existe plus dans le cache, fn_get_sql renvoie un ensemble de résultats vide. Si vous transmettez un handle qui n'est pas valide, le lot s'arrête et un message d'erreur s'affiche.

Le Microsoft Moteur de base de données SQL Server 2005 ne peut pas mettre en cache certaines instructionsTransact-SQL, telles que les instructions de copie en bloc et les instructions avec des chaînes littérales de plus de 8 Ko. Les handles de ces instructions ne peuvent pas être extraits avec fn_get_sql.

La colonne text de l'ensemble de résultats est filtrée pour le texte qui contient des mots de passe. Pour plus d'informations sur la sécurité liée aux procédures stockées non contrôlées, consultez Filtrage d'une trace.

La fonction fn_get_sql renvoie des informations similaires à celles de 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é.

L'utilisateur doit disposer de l'autorisation VIEW SERVER STATE sur le serveur.

Nom de la colonne Type de données Description

dbid

smallint

ID de base de données. NULL pour les instructions SQL ad hoc.

objectid

int

Identificateur de l'objet de base de données. NULL pour les instructions SQL ad hoc.

number

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.

encrypted

bit

Indique si l'objet est chiffré.

0 = Non chiffré

1 = Chiffré

text

text

Texte de l'instruction SQL. NULL pour les objets chiffrés.

Les administrateurs de base de données peuvent utiliser la fonction fn_get_sql, comme indiqué dans l'exemple suivant pour identifier les problèmes de traitement. Lorsque l'administrateur identifie un ID de session problématique, il peut extraire le handle SQL de cet ID de session, appeler fn_get_sql avec le gestionnaire, 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 ::fn_get_sql(@Handle);
GO
Afficher: