gpt4 book ai didi

jobs - 这是在sql server中删除多个作业的正确方法

转载 作者:行者123 更新时间:2023-12-04 20:50:05 25 4
gpt4 key购买 nike

我使用 SQL Server 2012,我有一个案例,我必须删除 sql 作业。我找到了两种方法,如下所示:

方法一

DECLARE @jobId binary(16)  

WHILE (1=1)
BEGIN
SET @jobId = NULL
SELECT TOP 1 @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name like N'Abc%')

IF @@ROWCOUNT = 0
BREAK

IF (@jobId IS NOT NULL)
BEGIN
EXEC msdb.dbo.sp_delete_job @jobId
END
END

方法二
DECLARE @listStr VARCHAR(MAX)=null

SELECT @listStr = COALESCE(@listStr+'exec msdb.dbo.sp_delete_job ' ,'') + '''' + convert(varchar(max),job_id) + '''; '
FROM msdb.dbo.sysjobs WHERE (name like N'$(TestPublisherServer)-$(TestPublisherDB)%')

IF @listStr is not null
BEGIN
PRINT 'exec msdb.dbo.sp_delete_job ' + @listStr
EXEC ('exec msdb.dbo.sp_delete_job ' + @listStr)
END

这两种方法都会删除作业,但我想知道哪种方法最好,或者您可以建议我更有效或更正确的删除作业的方法。

还有一个问题是,我们是否必须在删除作业之前停止/禁用该作业。

TIA
哈沙

最佳答案

我会用 方法 1 因为它只是简单而有效。之前无需禁用该作业。如果您在作业运行时删除作业,作业将因错误而终止,因此请检查这是否符合您的要求。

处理此问题的方法(由 OP 发布):

IF exists(
select 1 from msdb.dbo.sysjobactivity activity
where activity.run_Requested_date is not null
and activity.stop_execution_date is null
and activity.job_id = @jobId)
exec msdb.dbo.sp_stop_job @job_id = @jobId

我不确定你是否担心住宿的日程安排。取决于如何 @delete_unused_schedule已设置, sp_delete_job将默认删除它。

查看存储过程注释
@delete_unused_schedule   BIT   = 1     -- For backward compatibility schedules are deleted by default if they are not 
-- being used by another job. With the introduction of reusable schedules in V9
-- callers should set this to 0 so the schedule will be preserved for reuse.

因此,此选项将使您保持灵活,但我认为您将不需要时间表,因为您可能想要清理您的系统。

关于jobs - 这是在sql server中删除多个作业的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com