【问题标题】: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;