簡體   English   中英

如何執行 SQL 表中列出的 SQL Server 代理作業

[英]How to execute SQL Server Agent Jobs which are listed in SQL Table

我試圖將所有 SQL Server 代理作業存儲在表名中,並希望根據它們的加載頻率執行它們。

CREATE TABLE Maintainance
(
SQLJobName varchar(100), --SQL Job Name which needs to be executed
Frequency varchar(50), -- It can be Daily, Monthly, Weekly, Yearly
ManualRunDate date,  --If Frequency is not given need to execute on this date
LastRunDate datetime, -- If job ran successful it will put the date and time
IsSucceed bit, --1 for Success 0 for fail
Email nvarchar(50) -- email address
)

我想使用 TSQL 執行這些作業。 此外,表中可能有多個需要運行的作業。 如果第一個工作失敗,它應該給表中列出的人發送電子郵件,它將執行下一個工作。 如何在 sql 中使用游標或僅使用 While 循環來做到這一點?

declare cur cursor for
select Frequency from Maintainance

declare @x int
open cur
fetch next from cur into @x

while @@FETCH_STATUS = 0
BEGIN
    EXEC msdb.dbo.sp_start_job @job_name = @job_name

    fetch next from cur into @x
END

如果您有任何其他建議可以更好地完成此操作,請不要猶豫給我一個想法。

a) 創建一個 proc,它運行具有適當frequency值的 proc 列表,執行它們並更新lastrun列。

  1. 在其中創建一個參數@frequency ,將其傳遞給外部。
  2. 使用此參數過濾您的 proc 列表
  3. 使用此“頻率”循環遍歷 procs 列表並運行 procs

例如

alter proc dbo.RunProcs
  @Frequency varchar(50)
as
begin
  declare @crProcs cursor 

  set @crProcs = cursor fast_forward for
  select m.ProcName
  from dbo.Maintainance m
  where m.Frequency = @Frequency
  order by 1

  ...
  while @@fetch_status = 0
  beign
      begin try
        exec @ProcName
        ...
        update -> succeded
        ...
      end try
      begin catch
        ...
        update -> failed
        ...
      end catch
    fetch ...
  end

  return 1
end

b) 創建計划作業來運行此過程

  1. 創建一個作業“DAILY PROCS” ,為該作業分配一個時間表,使其每天運行。

    使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'day'

  2. 創建一個作業“WEEKLY PROCS” ,為該作業分配一個時間表,使其每周運行

    使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'week'

  3. 創建一個作業“MONTHLY PROCS” ,為該作業分配一個時間表,使其每月運行

    使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'month'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM