2010-08-26 3 views

ответ

92

Да, посмотрите, это даст вам 50 последних выполненных инструкций SQL

SQL Server 2005 и выше только

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» не является признанным вариантом подсказок. Если он предназначен как параметр для функции, ориентированной на таблицу, убедитесь, что для режима совместимости с базой данных установлено значение 90. – 2010-08-26 20:20:05

+0

Как я уже сказал, 2005 год и только для профайлера 2000 года. В следующий раз укажите, какая версия сервера sql вы используете. – SQLMenace

+0

Microsoft SQL Server 2005 - 9.00 – 2010-08-26 20:22:57

1

Единственный способ я знаю, чтобы иметь SQL Server Profiler ход. К сожалению, это нужно запускать до выполнения запросов, поэтому, если вы надеетесь поймать что-то, что произошло на «ad hoc», оно не подходит. Если вы пытаетесь отследить, что делает часть кода, и хотите захватить запрошенные им запросы, это должно сработать.

24

При использовании 2005+ SQL Server:

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 

Большой наконечник от SQLAuthority!

Смежные вопросы