有没有办法以编程方式更新 SQL Server 代理作业计划时间

本文关键字:代理 Server 作业 计划 时间 SQL 更新 编程 方式 有没有 | 更新日期: 2023-09-27 17:56:04

目前我们有许多作业正在花费不同的时间,有什么方法可以按编程方式运行所有作业以同时安排。

有没有办法以编程方式更新 SQL Server 代理作业计划时间

可以在 msdb 中使用 T-SQL 更改开始时间。系统调度表。也许可以创建一个存储过程并从 C# 代码调用它。

下面的代码片段会将所有作业设置为在上午 6:30:45 运行。

-- times are stored as integers, eg. 63045 = 06:30:45
update s set
    s.active_start_time = 63045
from msdb..sysjobs j
    left join msdb..sysjobschedules js on j.job_id = js.job_id
    left join msdb..sysschedules s on js.schedule_id = s.schedule_id

有关详细信息,请参阅 dbo.sysschedules (Transact-SQL)。

你应该研究一下SMO。 此类提供对可在 SQL Management Studio 中执行的许多操作的编程访问。 以下是有关如何使用 SMO 启动作业的链接。

http://msdn.microsoft.com/en-us/library/ms202348.aspx

完整的PowerShell脚本,用于将所有作业更改为在凌晨2:30运行:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$svr = "."
$sql = new-object `
  Microsoft.SqlServer.Management.Smo.Server `
  $svr;;
$time = new-object -type "system.timespan" -argumentlist @(2,30,0)
$sql.jobserver.jobs | foreach-object {
    $_.jobschedules[0].activestarttimeofday = $time
    $_.jobschedules[0].alter()
}

$time可以根据需要进行调整,可以在循环中添加 IF 语句以仅修改特定作业,如果作业有多个计划,则需要对其进行修改,因为上述内容仅查看第一个计划。