如何检查存储过程或查询是否仍在SQL Server中运行?
主意
缺陷:
* 当服务器重新启动或过程中出现某种故障时,它会留下未解决的情况。 * 此方法在运行过程之前需要做一些工作,因此不能应用于已经运行的过程。
我希望能有一个可以合并为一个存储过程的解决方案procedure_name和/或pid,parameters作为输入,所以使用SQL Server的界面将无法正常工作跟踪程序或解决方案。
procedure_name
pid
parameters
用法示例:
CREATE PROCEDURE dbo.sp_sleeping_beauty @time_str varchar(50) AS SET NOCOUNT ON; WAITFOR DELAY @time_str; GO dbo.sp_sleeping_beauty '00:00:10' dbo.sp_sleeping_beauty '00:00:20' dbo.sp_sleeping_beauty '00:00:30'
该过程应该像
test_if_running 'dbo.sp_sleeping_beauty '00:00:20''
并在运行时(20秒内)返回true,然后在函数失败或系统重新启动后返回false
您可能会查询 sys.dm_exec_requests其中将提供sesion_ID,等待时间和感兴趣的其他行的sys.dm_exec_sql_text查询,并使用SQL为您的过程对查询进行交叉应用过滤。
sys.dm_exec_requests
sys.dm_exec_sql_text
Select * from ( SELECT * FROM sys.dm_exec_requests where sql_handle is not null ) a CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) t where t.text like 'CREATE PROCEDURE dbo.sp_sleeping_beauty%'