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

How to check if the stored procedure is scheduled to run at specific time

在我的 SQL Server 2008 中,存储过程 P_ABC 被安排在每天 运行 2 a.m。

但是我如何验证此过程 P_ABC 被安排在每天 运行 2 a.m。与否,它总是 运行ning 在 2 a.m。?是否有任何查询可以获取计划在特定时间 运行 的程序列表?

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

在高层次上,您需要在每个存储过程中执行以下操作:

  1. 调用将为特定作业分配新(递增)ID 的存储过程。此过程还将存储过程的名称 运行ning(作为参数传递)以及它在 table.

  2. 中启动的时间
  3. 在过程结束时,使用原始 ID 调用另一个存储过程,并使用结束时间更新审计记录。

这很有效,因为您知道什么是 运行、何时 运行 以及需要多长时间。

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

您也可以在那里找到它: 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%'
  );

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

请参考这个question/answer列出商店程序:Query to list all stored procedures

谢谢

这个问题太老了,但我仍然发布这个。你可以试试 -

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'