Sql-Server

從 sql 代理作業中刪除一個步驟

  • October 2, 2019

我將一堆作業從 HA 伺服器複製到正常伺服器,我只需要刪除這些作業的第一步(檢查主要)而不是所有作業。有什麼建議嗎?這是我用來查找它們的查詢

SELECT 
a.job_id
,name
,enabled
,b.command
,b.step_name
,b.step_id
FROM msdb.dbo.sysjobs a
INNER JOIN msdb.dbo.sysjobsteps b
ON a.job_id = b.job_id
where step_name like '%check prima%'

您可以嘗試動態生成 TSQL 以刪除特定步驟。這是一個例子:

SELECT 
'exec msdb.dbo.sp_delete_jobstep @job_id=''' + convert(varchar(50), a.job_id) + '''' + ', @step_id = ' + convert(varchar(30), b.step_id) as CmdToExec ,
a.job_id
,name
,enabled
,b.command
,b.step_name
,b.step_id
FROM msdb.dbo.sysjobs a
INNER JOIN msdb.dbo.sysjobsteps b
ON a.job_id = b.job_id
where b.step_name like '%test%' and b.step_id=1

然後,從上面的選擇中手動執行 CmdToExec 列中的語句

CmdToExec
exec msdb.dbo.sp_delete_jobstep @job_id='02CA12AD-FAAC-4788-9D31-14143F0ED739', @step_id = 1
exec msdb.dbo.sp_delete_jobstep @job_id='41B86E98-F033-4847-8104-42FD6B49A21F', @step_id = 1

一個更快/更安全的方法可能是更新步驟 1 中的命令以執行,如果它不是主要的,或者不在 AG 中,或者其他什麼。

update msdb.dbo.sysjobsteps
set command = 'print ''removed primary check code'''
where command = 'your old code'
and step_id = 1
and step_name like '%check prima%'

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