如何检查存储过程是否计划在特定时间运行

时间:2015-05-17 09:04:37

标签: sql sql-server sql-server-2008 stored-procedures scheduled-tasks

在我的SQL Server 2008中,存储过程P_ABC计划在每天凌晨2点运行。

但是,如何验证此程序P_ABC是否安排在每天凌晨2点运行,并且它始终在凌晨2点运行?是否有任何查询来获取计划在特定时间运行的过程列表?

3 个答案:

答案 0 :(得分:1)

这个问题太老了,但我仍在发布。您可以尝试-

CREATE PROCEDURE MyTask
 AS
BEGIN  
    SET NOCOUNT ON;
    --  For executing the stored procedure at 11:00 P.M
    declare @delayTime nvarchar(50)
    set @delayTime = '23:00'

    while 1 = 1
    begin
        waitfor time @delayTime 
        begin
            --Name for the stored proceduce you want to call on regular bases
            execute [DatabaseName].[dbo].[StoredProcedureName];
        end
    end
END

然后

-- Sets stored procedure for automatic execution.
sp_procoption    @ProcName = 'MyTask',
                @OptionName = 'startup',
                @OptionValue = 'on'

答案 1 :(得分:0)

我不知道能够简单地查询SQL以找出存储过程何时运行的任何选项。我有一系列审核表来存储这些信息。设置需要花费一些时间,但会为您提供所需的一切。

在较高级别,您需要在每个存储过程中执行以下操作:

  1. 调用将为特定作业分配新(递增)ID的存储过程。此过程还将存储正在运行的过程的名称(作为参数传递)以及何时在表中启动。

  2. 在程序结束时,使用原始ID调用另一个存储过程,并使用结束时间更新审核记录。

  3. 这很有效,因为你知道什么是运行,什么时候运行以及需要多长时间。

答案 2 :(得分:0)

不确定这正是您所需要的,但您可以在下面查看以下代码。

你也可以在那里找到它: SQL Server Find What Jobs Are Running a Procedure

SELECT j.name 
  FROM msdb.dbo.sysjobs AS j
  WHERE EXISTS 
  (
    SELECT 1 FROM msdb.dbo.sysjobsteps AS s
      WHERE s.job_id = j.job_id
      AND s.command LIKE '%procedurename%'
  );

使用此方法,您可以列出所有商店过程(按名称),然后查找包含这些商店过程的所有作业(或更具体的步骤)。

请参阅此问题/答案列出商店程序:Query to list all stored procedures

由于