【问题标题】:Disable all SQL Agent Jobs in a particular category禁用特定类别中的所有 SQL 代理作业
【发布时间】:2017-08-29 05:21:03
【问题描述】:

我有以下查询,它生成了禁用特定于某个类别的所有 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 sql-server tsql sql-server-2016 sql-server-agent


    【解决方案1】:

    您可以使用动态 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;
    

    【讨论】:

      猜你喜欢
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多