4

我有几个SQL维护作业有50个以上的作业步骤。偶尔,需要为这些怪异的SQL作业之一添加一两步。我的问题是,我更喜欢每个步骤按字母顺序(如果可能),但要完成此操作,我需要按向上箭头无数次,然后等待屏幕刷新。我研究了sp_update作业过程,他们似乎没有解决这个问题。TSQL-在代码中重新排列sql作业步骤顺序

有没有一种方法可以在代码中完成?

+0

所以这些工作都不依赖于另一个工作? – 2013-02-11 17:33:24

+0

不幸的不是。 :(我的目的是以某种方式将他们串联起来,我总是可以让他们陷入混乱状态,但按字母顺序排列,但这会让我感到非常困难:D – kermitforney 2013-02-11 17:37:52

回答

0

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

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

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

+0

感谢Pond!我之前的印象是,我的Google搜索结果为零。我会手工制作一个,但没有时间。+1愿望清单:) – kermitforney 2013-02-11 18:08:40

2

我发现这个问题,同时尝试重新排序而不清除它们并重新添加它们。

为了解决这种情况,我有三个步骤: (假设仅存在一个步骤进行的顺序,或使现有步骤都在字母顺序)

1)如果需要,删除您想要重新排序的步骤。 (如果你需要的任何现有值应该使用一个选择对msdb.dbo.sysjobsteps)

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 @[email protected], @step_name=N'YOURNEWSTEPNAME', 
    @[email protected], 
    etc... 

经MS SQL Server 2008 R2测试。希望能帮助其他人看到这一点。

+0

确认插入洗牌剩下的部分。插入步骤1还会将作业设置为从新插入的步骤开始,这比ssms通过向导为我执行的操作要多。 – Alex 2014-11-14 13:20:09