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