Ste*_*gin 12 sql sql-server stored-procedures
如何检查存储过程或查询是否仍在SQL Server中运行?
思路
我想过在程序启动时有一个日志写入的位置,并在结束时删除.
缺陷:
使用进程监视器
我希望能有一个可以合并为一个存储过程的解决方案procedure_name
和/或pid
,parameters
作为输入,所以跟踪程序或使用SQL Server的界面将无法正常工作的解决方案.
用法示例:
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'
Run Code Online (Sandbox Code Playgroud)
该程序应该被称为
test_if_running 'dbo.sp_sleeping_beauty '00:00:20''
Run Code Online (Sandbox Code Playgroud)
在运行(20秒)时返回true,在函数失败或系统重启后返回false
bum*_*mmi 11
您可以查询 sys.dm_exec_requests
哪些将提供sesion_ID,waittime和更多感兴趣的行,并且CROSS APPLY 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%'
Run Code Online (Sandbox Code Playgroud)
更新: John Clayton给出的答案引用了过时的SQL Server 2000系统表(sys.sysprocesses)。更新的SQL是:
SELECT
object_name(st.objectid) as ProcName
FROM
sys.dm_exec_connections as qs
CROSS APPLY sys.dm_exec_sql_text(qs.most_recent_sql_handle) st
WHERE
object_name(st.objectid) is not null
Run Code Online (Sandbox Code Playgroud)
上面的SQL代码返回您正在运行的进程的名称列表。请注意,您需要获得查看服务器/数据库状态的权限。
归档时间: |
|
查看次数: |
49487 次 |
最近记录: |