Sql-Server

執行 sp_update_jobstep 以更改 SQL 代理作業步驟類型

  • March 9, 2020

當我打算對我們的 Ola Hallengren 索引腳本進行更改時,我注意到在一些 SQL Server 上,我們將索引作業作為“作業系統 (CmdExec)”步驟執行,而不是被稱為“Transact-SQL 腳本 (T- SQL)”步驟。

我正在使用 CMS 來部署它,sp_update_jobstep並且我希望一切都作為“Transact-SQL 腳本(T-SQL)”。

似乎沒有辦法更改步驟(除非我在這篇 Microsoft 文章中混淆了術語

use msdb
go

exec sp_update_jobstep @job_name = N'IndexOptimize_USER_DATABASES', 
                      @step_id = 1, 
                      @command = N'EXECUTE [dbo].[IndexOptimize], @Databases = ''USER_DATABASES'', @LogToTable = ''Y'', @LockTimeOut = 300'

有沒有辦法改變步驟類型?

您可以使用 的@subsystem=N'TSQL'參數sp_update_jobstep來更改 Step-Type。有關有效子系統值的列表,請參閱sp_add_jobstep 。

例子:

EXEC msdb.dbo.sp_update_jobstep @job_name = N'test'
   ,@step_id = 1
   ,@subsystem = N'TSQL'
   ,@command = N'EXECUTE [dbo].[IndexOptimize], @Databases = ''USER_DATABASES'', @LogToTable = ''Y'', @LockTimeOut = 300'

更一般地說,如果您想為代理作業編寫更改腳本並且您不確定如何 - 您可以使用 ⎎ Script ▾GUI 中的按鈕將您在目前會話中進行的所有更改編寫腳本。

例如,如果我想將同一個作業更改IndexOptimize_USER_DATABASES為不再登錄到表,我會按照下面的螢幕截圖步驟進行操作……

在 jobstep 文本框中暫存更改,然後按“確定”

選擇導出腳本的位置

…這會給我一個帶有以下文本的新查詢視窗。

USE [msdb]
GO
EXEC msdb.dbo.sp_update_jobstep @job_id=N'cbbf1dc7-d128-499e-91d3-4df88ada2e5f', @step_id=1 , 
       @command=N'EXECUTE [dbo].[IndexOptimize]
@Databases = ''USER_DATABASES'',
@LogToTable = ''N'''
GO

引用自:https://dba.stackexchange.com/questions/261531