62 votes

TSQL : Obtenir les dernières requêtes exécutées

Existe-t-il un moyen d'obtenir le texte SQL des dernières requêtes ?

J'utilise Microsoft SQL Server 2005

114voto

SQLMenace Points 68670

Oui, jetez un coup d'oeil, cela vous donnera les 50 plus récentes déclarations 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

32voto

Dustin Laine Points 22815

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

Bon conseil de la part de SQLAuthority !

1voto

Rob Points 24505

Le seul moyen que je connaisse est de faire en sorte que les Profileur du serveur SQL en cours. Malheureusement, cette opération doit être lancée avant l'exécution des requêtes, donc si vous espérez capturer quelque chose qui s'est produit sur une base "ad hoc", elle ne conviendra pas. Si vous essayez de suivre ce que fait un morceau de code et que vous voulez capturer les requêtes qu'il exécute, cela devrait fonctionner à merveille.

1voto

David Vaughan Points 81

Si vous avez besoin d'inspecter les valeurs des paramètres, cet ajout renvoie l'adresse de l'utilisateur. <ParameterList> XML

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,
  SUBSTRING(
    s3.query_plan,CHARINDEX('<ParameterList>',s3.query_plan),
    CHARINDEX('</ParameterList>',s3.query_plan) + LEN('</ParameterList>') - CHARINDEX('<ParameterList>',s3.query_plan)
  ) AS Parameters,
  last_execution_time
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
CROSS APPLY sys.dm_exec_text_query_plan(s1.plan_handle, s1.statement_start_offset,
  s1.statement_end_offset) AS s3
) x
WHERE sql_statement NOT like 'SELECT TOP 50 * FROM(SELECT %'
ORDER BY last_execution_time DESC

Version enrichie

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X