TSQL: Get Last Queries Ran

前端 未结 4 1667
傲寒
傲寒 2020-12-07 10:05

Is there a way to get the SQL text for the last few queries?

I am using Microsoft SQL Server 2005

相关标签:
4条回答
  • 2020-12-07 10:19

    If you need to inspect parameter values, this addition returns the <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
    

    Prettified version

    0 讨论(0)
  • 2020-12-07 10:20

    If using 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
    

    Great tip from SQLAuthority!

    0 讨论(0)
  • 2020-12-07 10:22

    The only way I'm aware of is to have the SQL Server Profiler running. Unfortunately this needs to be started prior to the queries being executed, so if you're hoping to catch something that's happened on an "ad hoc" basis, it won't be suitable. If you're trying to track what a piece of code's doing and want to capture the queries it executes, it should work a treat.

    0 讨论(0)
  • 2020-12-07 10:27

    Yes, take a look, this will give you the 50 most recent executed SQL statements

    sql 2005 and up only

    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 讨论(0)
提交回复
热议问题