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

TSQL-在代码中重新排列sql作业步骤顺序,sql,sql-server-2008,tsql,sql-server-2008-r2,database-administration,Sql,Sql Server 2008,Tsql,Sql Server 2008 R2,Database Administration,我有一些SQL维护作业,它们有50个以上的作业步骤。有时,需要在这些可怕的SQL作业中添加一两个步骤。我的问题是,我希望每个步骤都按字母顺序(如果可能的话),但要完成这一点,我需要无数次按向上箭头,然后等待屏幕刷新。我查看了sp_更新作业程序,但它们似乎没有解决这个问题 有没有一种方法可以在代码中实现 TSQL或SMO中的API中没有记录更改作业步骤顺序的过程。如果您在SSMS中重新排序作业步骤并生成操作脚本,您将看到它以新的顺序删除并重新创建所有作业步骤 最明显的解决方案是开发您自己的脚本或工

我有一些SQL维护作业,它们有50个以上的作业步骤。有时,需要在这些可怕的SQL作业中添加一两个步骤。我的问题是,我希望每个步骤都按字母顺序(如果可能的话),但要完成这一点,我需要无数次按向上箭头,然后等待屏幕刷新。我查看了sp_更新作业程序,但它们似乎没有解决这个问题


有没有一种方法可以在代码中实现

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

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


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

我在尝试重新排序步骤时发现了这个问题,但没有清除所有步骤并重新添加它们

为了解决这种情况,我有一个三步流程: (假设只有一个步骤不符合顺序,或者现有步骤均为alpha顺序)

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

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

@newStepPosition = SELECT MIN(step_id) FROM msdb.dbo.sysjobsteps WHERE job_id = @YOURJOBID AND step_name > N'YOURNEWSTEPNAME'
3) 只需添加作业步骤,指定职位即可。所有现有步骤都将向下移动。e、 g.在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进行测试。希望这对其他人有所帮助。

所以这些工作都不依赖于其他工作吗?不幸的是,不依赖于其他工作(我以某种方式研究了它们的层叠。我总是可以把它们弄得乱七八糟。按字母顺序排列,但这会让我发疯。:Dtanks Pond!在我的谷歌搜索结果为零后,我一开始就有这种印象。我会手工制作一个,但没有时间。+1愿望列表:)证实插入会把其余的结果拖下来。插入步骤1还将作业设置为从新插入的步骤开始,这比ssms通过向导为我所做的还要多。
EXEC msdb.dbo.sp_add_jobstep @job_id=@YOURJOBID, @step_name=N'YOURNEWSTEPNAME',
  @step_id=@newStepPosition,
  etc...