2012-06-21 12 views
6

que requiero es tener un solo procedimiento almacenado que se puede ejecutar y mostrar obtener todas las consultas ejecutadas en SQL Server

"toda SQL para la conexión actual que tiene ejecutado anteriormente" y "no está funcionando".

He buscado mucho sobre esto y no puedo encontrar la respuesta. Por favor ayúdame con esto.

Respuesta

9

Es mejor usar el Analizador para esta tarea.

Pero si quieres una consulta en SQL Server 2005+ puede utilizar las vistas del sistema sys.dm_exec_query_stats, que returns aggregate performance statistics for cached query plans pero sólo para los planes cobrados, y sys.dm_exec_sql_text. Lamentablemente, no tienen información sobre la ID de sesión, por lo que solo puede obtener consultas en efectivo de una instancia de servidor.

set transaction isolation level read uncommitted 
select top 1000 
    creation_time, 
    last_execution_time, 
    case 
     when sql_handle IS NULL then ' ' 
     else(substring(st.text,(qs.statement_start_offset+2)/2,(
      case 
       when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2  
       else qs.statement_end_offset  
      end - qs.statement_start_offset)/2 )) 
    end as query_text, 
    db_name(st.dbid)as db_name, 
    object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name 
FROM sys.dm_exec_query_stats qs 
    cross apply sys.dm_exec_sql_text(sql_handle) st 
ORDER BY db_name, object_name 
+0

genial :). Eso es lo que estaba buscando. Muchas gracias –

+0

@PriteshGupta. De nada. –

4

En Oracle:

How do I show running processes in Oracle DB?

En SQL server 2005+ puede averiguar las anteriores utilizando SPID creo. Le mostrará el proceso con el XXX SPID. Tal vez pueda obtener el SPID del proceso en ejecución y crear un bucle hasta el SPID del que se está ejecutando. Para que pueda obtener todos los procesos hasta ejecutar procesos.

DECLARE @sqltxt VARBINARY(128) 
SELECT @sqltxt = sql_handle 
FROM sys.sysprocesses 
WHERE spid = XXX 
SELECT TEXT 
FROM sys.dm_exec_sql_text(@sqltext) 
GO 

También puede obtener la ejecución de declaraciones SQL por estos;

SELECT sqltext.TEXT, 
req.session_id, 
req.status, 
req.command, 
req.cpu_time, 
req.total_elapsed_time 
FROM sys.dm_exec_requests req 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext 

le será útil. Supongo que

+0

¿No es sys.dm_exec_requests solo información sobre las consultas que se están ejecutando actualmente? –

+0

Igor, sí. Esto obtendrá los que están corriendo. Editando de nuevo:/ – alicanbatur

+0

http://blog.sqlauthority.com/2009/07/19/sql-server-get-last-running-query-based-on-spid/ tiene 3 formas de mostrar la última consulta ejecutada por sesión . Me gusta 'DBCC INPUTBUFFER (@DesiredSPID)' uno. – milivojeviCH

Cuestiones relacionadas