2010-08-26 5 views

Répondre

92

Oui, jetez un coup d'oeil, 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 
+0

37000 (321) [Microsoft] [ODBC SQL Server Driver] [ SQL Server] "sql_handle" n'est pas une option de table identifiée. Si elle est prévue en tant que paramètre pour une fonction table, assurez-vous que votre mode de compatibilité de base de données est défini sur 90. –

+0

Comme je l'ai dit 2005 et plus seulement, pour 2000 profileur d'exécution. La prochaine fois, indiquez la version du serveur SQL que vous utilisez. – SQLMenace

+0

Microsoft SQL Server 2005 - 9.00 –

1

La seule façon dont je suis au courant est d'avoir le fonctionnement SQL Server Profiler. Malheureusement, ceci doit être démarré avant que les requêtes soient exécutées, donc si vous espérez attraper quelque chose qui est arrivé sur une base "ad hoc", cela ne sera pas approprié. 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.

24

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 

Grand Conseil de SQLAuthority!

Questions connexes