TSQL-在代码中重新排列sql作业步骤顺序

时间:2013-02-11 17:25:24

标签: sql sql-server-2008 tsql sql-server-2008-r2 database-administration

我有几个SQL维护工作,有超过50个工作步骤。有时,需要在这些可怕的SQL作业之一中添加一步或两步。我的问题是我更喜欢每个步骤按字母顺序排列(如果可能),但为了实现这一点,我需要无数次按向上箭头并等待屏幕刷新。我查看了sp_update作业程序,它们似乎没有解决这个问题。

有没有办法可以在代码中完成?

2 个答案:

答案 0 :(得分:3)

我在尝试重新排序步骤时发现了这个问题而没有全部清除它们并重新添加它们。

要解决这个问题,我有三个步骤: (假设只有一步乱序,或者现有的步骤都是按字母顺序排列的)

1)如有必要,请删除要重新订购的步骤。 (如果需要任何现有值,则应对msdb.dbo.sysjobsteps使用select)

EXEC msdb.dbo.sp_delete_jobstep @job_id = @YOURJOBID, @step_id = @OUTOFORDERSTEPID

2)使用比较来获得新步骤应该处于的位置。

@newStepPosition = SELECT MIN(step_id) FROM msdb.dbo.sysjobsteps WHERE job_id = @YOURJOBID AND step_name > N'YOURNEWSTEPNAME'

3)只需添加作业步骤,指定位置。所有现有步骤都会随之而来。例如插入3将推送3到4,4到5等

EXEC msdb.dbo.sp_add_jobstep @job_id=@YOURJOBID, @step_name=N'YOURNEWSTEPNAME',
  @step_id=@newStepPosition,
  etc...

使用MS SQL Server 2008 R2进行测试。希望能帮助其他人看这个。

答案 1 :(得分:0)

SMO中的TSQL或API中没有文档化的过程来更改作业步骤的顺序。如果您在SSMS中重新排序作业步骤并生成操作脚本,您将看到它删除并重新创建新订单中的所有作业步骤。

最明显的解决方案是开发自己的脚本或工具,通过删除和重新创建步骤来重新排序步骤,即重新创建SSMS功能,但针对您自己的需求进行了优化。

最后一种方法是更新sysjobsteps.step_id以修改执行顺序,但绝对不建议直接修改系统表。