有没有办法通过编程方式更新Sql Server Agent作业调度时间

时间:2013-01-24 15:16:22

标签: c# sql-server sql-server-agent

目前我们有很多工作正在安排不同的时间有没有办法我们可以通过编程方式运行所有工作来安排。

3 个答案:

答案 0 :(得分:1)

你应该看看SMO。该类提供了对SQL Management Studio中可以执行的许多操作的编程访问。以下是如何使用SMO开始工作的链接。

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

答案 1 :(得分:1)

您可以使用msdb..sysschedules表中的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)

答案 2 :(得分:0)

完整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语句以仅修改特定作业,如果作业有多个计划,则需要修改它,因为上面只查看第一个计划