2011-03-04 22 views
11

¿Cómo puedo encontrar cuál es la consulta asociada que se está ejecutando si tengo el SPID? Tratando de averiguar qué consulta se está asociando ya que el proceso parece estar bloqueado.SQL Server - Proceso de ejecución - Consulta de SPID

+0

¿qué versión de SQL Server estás usando? –

Respuesta

10

¿qué versión del servidor sql? para el año 2000 y hasta puede hacer

dbcc inputbuffer (spid) 

que dará a los primeros 255 caracteres

reemplazar SPID con el número numérico para SPID

para el año 2005 en adelante, el cambio @@ SPID para el SPID que están buscando

select dest.* 
from sys.dm_exec_requests as der 
      cross apply sys.dm_exec_sql_text (der.sql_handle) as dest 
where session_id = @@spid 
3

Suponiendo SQL Server 2005+

SELECT 
    CASE 
     WHEN statement_end_offset = -1 
     THEN text 
     ELSE SUBSTRING(text,statement_start_offset/2,(statement_end_offset- statement_start_offset)/2) 
    END, * 
FROM sys.dm_exec_requests 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE session_id = <whatever> 

Es posible que desee descargar el procedimiento de "Who is Active?" que reúne mucha más información que eso.

12
--Find Current SQL Statements that are Running 
SELECT SPID   = er.session_id 
     ,STATUS   = ses.STATUS 
     ,[Login]  = ses.login_name 
     ,Host   = ses.host_name 
     ,BlkBy   = er.blocking_session_id 
     ,DBName   = DB_Name(er.database_id) 
     ,CommandType = er.command 
     ,ObjectName  = OBJECT_NAME(st.objectid) 
     ,CPUTime  = er.cpu_time 
     ,StartTime  = er.start_time 
     ,TimeElapsed = CAST(GETDATE() - er.start_time AS TIME) 
     ,SQLStatement = st.text 
FROM sys.dm_exec_requests er 
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st 
    LEFT JOIN sys.dm_exec_sessions ses 
     ON ses.session_id = er.session_id 
    LEFT JOIN sys.dm_exec_connections con 
     ON con.session_id = ses.session_id 
WHERE st.text IS NOT NULL 
Cuestiones relacionadas