一尘不染

检查存储过程是否正在运行

sql

如何检查存储过程或查询是否仍在SQL Server中运行?

主意

  1. 我曾经想过要在过程开始时在哪里写日志,并在过程结束时将日志删除。

缺陷:

* 当服务器重新启动或过程中出现某种故障时,它会留下未解决的情况。
* 此方法在运行过程之前需要做一些工作,因此不能应用于已经运行的过程。
  1. 使用过程监控器

我希望能有一个可以合并为一个存储过程的解决方案procedure_name和/或pidparameters作为输入,所以使用SQL
Server的界面将无法正常工作跟踪程序或解决方案。

更新#1


用法示例:

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


阅读 166

收藏
2021-03-10

共1个答案

一尘不染

您可能会查询
sys.dm_exec_requests其中将提供sesion_ID,等待时间和感兴趣的其他行的sys.dm_exec_sql_text查询,并使用SQL为您的过程对查询进行交叉应用过滤。

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%'
2021-03-10