禁用特定类别中的所有 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;
我有以下查询生成禁用所有特定于某个类别的 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;