8

我需要的是有一个可以执行和显示的存储过程

“当前连接的所有 SQL 先前已运行”和“当前未运行”。

我对此进行了很多搜索,但找不到答案。请帮助我。

4

2 回答 2

12

最好使用 Profiler 来完成此任务。

但是如果你想要一个查询,SQL Server 2005+你可以使用系统视图sys.dm_exec_query_statsreturns aggregate performance statistics for cached query plans但仅适用于兑现计划sys.dm_exec_sql_text。不幸的是,他们没有关于会话 ID 的信息,因此您只能获得服务器实例的兑现查询。

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
于 2012-06-21T11:51:29.310 回答
5

在甲骨文中:

如何在 Oracle DB 中显示正在运行的进程?

SQL server 2005+你可以找到以前的使用 SPID 我认为。它会为您提供带有 XXX SPID 的进程。也许您可以获取正在运行的进程的 SPID 并创建一个循环,直到正在运行的 SPID。所以你可以得到所有进程直到运行进程。

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

你也可以通过这些来运行 sql 语句;

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

它将对您有用。我猜

于 2012-06-21T11:45:47.967 回答