【发布时间】:2014-09-15 10:47:14
【问题描述】:
如何检查存储过程或查询是否仍在 SQL Server 中运行?
想法
-
我曾想过在程序开始时在哪里写入日志,并在程序结束时将其删除。
缺陷:
- 当服务器重新启动或过程内部出现某种故障时,它会保持开放状态。
- 此方法在运行程序前需要做一些工作,因此不能应用于已经运行的程序。
使用进程监视器
我更喜欢一种可以作为存储过程并入的解决方案,其中procedure_name 和/或pid、parameters 作为输入,因此使用 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
【问题讨论】:
-
一个真实的例子是,当更多的用户或过程使用一个不能同时使用的存储过程时,必须检查该过程是否已经在运行
标签: sql sql-server stored-procedures