Mar*_*lli 2 sql-server sql-server-2008-r2 select sql-server-2012 sql-server-2014
我想删除与一组特定数据库相关的所有作业。
因此,我已将所有名称添加到表变量中,并尝试生成脚本以删除作业。
我怎样才能做到这一点?
use msdb
go
DECLARE @R TABLE ( NAME VARCHAR(108) NOT NULL PRIMARY KEY CLUSTERED)
INSERT INTO @R(NAME)
SELECT
'UK15SUMMProduct' UNION ALL SELECT
'US15SUMMProduct' UNION ALL SELECT
'DE15SUMMProduct' UNION ALL SELECT
'AT15SUMMProduct' UNION ALL SELECT
'FR15SUMMProduct' UNION ALL SELECT
'EU15SUMMProduct' UNION ALL SELECT
'AU15SUMMProduct' UNION ALL SELECT
'UK15SUMSProduct' UNION ALL SELECT
'US15SUMSProduct' UNION ALL SELECT
'DE15SUMSProduct' UNION ALL SELECT
'AT15SUMSProduct' UNION ALL SELECT
'FR15SUMSProduct' UNION ALL SELECT
'EU15SUMSProduct' UNION ALL SELECT
'AU15SUMSProduct'
SELECT S.*
FROM SYSJOBS S
WHERE NAME LIKE ( SELECT NAME FROM @R)
Run Code Online (Sandbox Code Playgroud)
类似于上面的选择,我想查看其中包含数据库名称的所有作业并删除它们,例如,如下面的脚本所示:
exec sp_delete_job @job_name = 'WebFeed UK15SUMMProduct', @delete_unused_schedule = 0
Run Code Online (Sandbox Code Playgroud)
这是整个查询:
Declare @job sysname
Declare jobs_cursor Cursor For
Select S.name
From msdb.dbo.SYSJOBS S
Inner Join (values
('UK15SUMMProduct')
, ('US15SUMMProduct')
, ('DE15SUMMProduct')
, ('AT15SUMMProduct')
, ('FR15SUMMProduct')
, ('EU15SUMMProduct')
, ('AU15SUMMProduct')
, ('UK15SUMSProduct')
, ('US15SUMSProduct')
, ('DE15SUMSProduct')
, ('AT15SUMSProduct')
, ('FR15SUMSProduct')
, ('EU15SUMSProduct')
, ('AU15SUMSProduct')
) as n(name) on S.name like '%'+n.name + '%'
Open jobs_cursor
Fetch Next From jobs_cursor into @job
While @@Fetch_Status = 0
Begin
Print 'Remove: '+@job
exec sp_delete_job @job_name = @job, @delete_unused_schedule = 0
Fetch Next From jobs_cursor into @job
End
Close jobs_cursor
Deallocate jobs_cursor
Run Code Online (Sandbox Code Playgroud)
部分内容与之前的答案类似。
您可以将 values(...) 替换为表变量或真实表。