禁用特定类别中的所有 SQL 个代理作业

Disable all SQL Agent Jobs in a particular category

我有以下查询生成禁用所有特定于某个类别的 SQL 代理作业所需的命令。

Select 'Exec MSDB.dbo.sp_update_job @job_name = N''' + SJ.Name + ''', @Enabled = 0'
  FROM msdb..sysjobs SJ inner join msdb..syscategories SC
    on SJ.category_id = SC.category_id
 Where SJ.[Enabled] = 1
   and SC.Name = 'BI ETLs'

我怎样才能完全自动化它,以便它生成命令并执行它们而不是手动过程?

你可以使用动态 SQL:

DECLARE @sql NVARCHAR(MAX);

SET @sql = STUFF((    
  SELECT ';' + 'Exec MSDB.dbo.sp_update_job @job_name = N''' 
           + SJ.Name + ''', @Enabled = 0'
  FROM msdb..sysjobs SJ JOIN msdb..syscategories SC
    ON SJ.category_id = SC.category_id
 WHERE SJ.[Enabled] = 1
   and SC.Name = 'BI ETLs' FOR XML PATH('')),1 ,1, '') ;

EXEC dbo.sp_executesql @sql;

使用 SQL Server 2017 可以更容易地使用 STRING_AGG:

连接字符串
DECLARE @sql NVARCHAR(MAX);

SET @sql = (Select STRING_AGG('Exec MSDB.dbo.sp_update_job @job_name = N''' + SJ.Name + ''', @Enabled = 0', ';')
  FROM msdb..sysjobs SJ inner join msdb..syscategories SC
    on SJ.category_id = SC.category_id
 Where SJ.[Enabled] = 1
   and SC.Name = 'BI ETLs');

EXEC dbo.sp_executesql @sql;