2012-06-21 13 views
6

ho bisogno è di avere un unico stored procedure in grado di eseguire e mostrareottenere tutte le query eseguite in SQL Server

"tutto SQL per la connessione corrente che ha precedentemente eseguita" e "non attualmente in esecuzione".

Ho cercato molto su questo e non sono in grado di trovare la risposta. Per favore aiutami su questo.

risposta

9

È meglio usare il Profiler per questa attività.

Ma se volete una query in SQL Server 2005+ è possibile utilizzare viste di sistema sys.dm_exec_query_stats, che returns aggregate performance statistics for cached query plans ma solo per le piani incassati e sys.dm_exec_sql_text. Sfortunatamente non hanno informazioni sull'ID di sessione in modo da poter ottenere solo le richieste incassate di un'istanza del server.

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

ottimo :). Questo è quello che stavo cercando.Grazie mille –

+0

@PriteshGupta Sei il benvenuto. –

4

In Oracle:

How do I show running processes in Oracle DB?

In SQL server 2005+ si può scoprire quelle precedenti che utilizzano SPID credo. Ti darà il processo con lo SPID XXX. Forse puoi ottenere il processo in esecuzione "SPID" e creare un ciclo fino a quando si esegue lo SPID. In questo modo è possibile ottenere tutti i processi fino ai processi in esecuzione.

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

Inoltre è possibile ottenere istruzioni SQL da questi;

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 

sarà utile per voi. Immagino che

+0

Non sys.dm_exec_request contiene informazioni solo sulle query attualmente in esecuzione? –

+0

Igor, si. Questo otterrà quelli in esecuzione. Modifica di nuovo:/ – alicanbatur

+0

http://blog.sqlauthority.com/2009/07/19/sql-server-get-last-running-query-based-on-spid/ ha 3 modi per mostrare l'ultima query eseguita per sessione . Mi piace "DBCC INPUTBUFFER (@DesiredSPID)". – milivojeviCH

Problemi correlati