【发布时间】:2016-03-11 21:44:59
【问题描述】:
我正在尝试将所有 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
如果您有任何其他建议可以做得更好,请随时给我一个想法。
【问题讨论】:
-
我能问一下为什么您要半手动执行作业,而不是根据您的需要安排这些作业运行吗?请注意,工作的内在好处是您能够安排它们并对事件做出反应,无论是失败还是成功。
-
有多个作业,要求创建表并将不同的作业名称放入表中,有些作业需要从表中获取日期并在该日期执行。我们无需查看历史记录,只需检查作业运行的时间和下一次运行的时间。
-
所以如果我理解正确,您不是在尝试手动执行作业吗?您的目标是查询表中作业的历史记录?如果您尝试实现任何类型的作业调度覆盖,我会重新审视您的要求,因为这是作业的工作:调度存储过程的执行。
-
我想根据表中的加载频率执行作业。如果它说每天它需要每天执行。我不想在创建作业时安排作业。我想创建它们并根据维护表频率运行它们。
-
>>我们可以只检查作业何时运行以及下一次运行时间的表,而不是查看历史记录。mssqltips.com/sqlservertip/2850/…
标签: sql sql-server tsql sql-server-2012