Get the query text for specific SPID/session

Have you ever wanted to get the query text for a SPID to see what query is or was in use?

This query works on SQL Server 2005/2008.

declare @v varbinary(max)
select * FROM sys.dm_exec_requests

--Get the handle by session_id (SPID)
SELECT @v=sql_handle FROM sys.dm_exec_requests
WHERE session_id = 135

--Get the query for the handle
SELECT s2.dbid,
    s1.sql_handle,
    (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,
    execution_count,
    plan_generation_num,
    last_execution_time,
    total_worker_time,
    last_worker_time,
    min_worker_time,
    max_worker_time,
    total_physical_reads,
    last_physical_reads,
    min_physical_reads,
    max_physical_reads,
    total_logical_writes,
    last_logical_writes,
    min_logical_writes,
    max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE
	s1.sql_handle = @v

ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset

About Phil

I'm a database administrator with over 10 years experience working in both administration and development using SQL Server 2000 and onwards. I love Terry Prattchet books, movies, music and; of course, my wife Sol - my inspiration and my shelter. "Although all answers are replies, not all replies are answers."
This entry was posted in T-SQL Code Examples and tagged , . Bookmark the permalink.

Leave a comment