2010-08-26 5 views

Antwort

92

Ja, einen Blick darauf werfen, dies wird Ihnen die letzten 50 ausgeführten SQL-Anweisungen

SQL 2005 und bis nur

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" ist keine erkannte Tabellenhinweisoption. Wenn es als Parameter für eine Tabellenwertfunktion vorgesehen ist, stellen Sie sicher, dass der Datenbankkompatibilitätsmodus auf 90 festgelegt ist. –

+0

Wie gesagt, 2005 und höher, für 2000 Profiler ausführen. Das nächste Mal geben Sie an, welche Version von SQL Server Sie ausführen – SQLMenace

+0

Microsoft SQL Server 2005 - 9.00 –

1

Der einzige Weg, mir bewusst bin, ist das SQL Server Profiler am Laufen zu haben. Leider muss dies gestartet werden, bevor die Abfragen ausgeführt werden. Wenn Sie also etwas "ad hoc" abfangen möchten, ist dies nicht geeignet. Wenn Sie versuchen zu verfolgen, was ein Code tut, und die Abfragen erfassen möchten, die er ausführt, sollte dies ein Vergnügen sein.

24

Bei der Verwendung von 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 

Große Spitze von SQLAuthority!