TSQL: Récupère les dernières requêtes

Est-il possible d’obtenir le texte SQL pour les dernières requêtes?

J’utilise Microsoft SQL Server 2005

Oui, regardez, cela vous donnera les 50 dernières instructions SQL exécutées

sql 2005 et plus seulement

SELECT TOP 50 * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName, execution_count,s2.objectid, (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, last_execution_time FROM sys.dm_exec_query_stats AS s1 CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 ) x WHERE sql_statement NOT like 'SELECT TOP 50 * FROM(SELECT %' --and OBJECTPROPERTYEX(x.objectid,'IsProcedure') = 1 ORDER BY last_execution_time DESC 

Si vous utilisez SQL Server 2005+:

 SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC 

Un bon conseil de SQLAuthority !

La seule façon dont je suis conscient est d’avoir SQL Server Profiler en cours d’exécution. Malheureusement, cela doit être démarré avant que les requêtes ne soient exécutées, donc si vous espérez attraper quelque chose qui s’est passé “ad hoc”, cela ne conviendra pas. Si vous essayez de savoir ce que fait un morceau de code et que vous voulez capturer les requêtes qu’il exécute, cela devrait vous gâcher.