[英]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
列。
@frequency
,將其傳遞給外部。例如
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) 創建計划作業來運行此過程
創建一個作業“DAILY PROCS” ,為該作業分配一個時間表,使其每天運行。
使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'day'
創建一個作業“WEEKLY PROCS” ,為該作業分配一個時間表,使其每周運行
使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'week'
創建一個作業“MONTHLY PROCS” ,為該作業分配一個時間表,使其每月運行
使用 T-SQL 添加作業步驟: exec dbo.RunProcs @Frequency = 'month'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.