Sql server 按条件删除SQL代理作业-脚本
我想删除当前未运行且描述为“xxxx”的所有SQL代理作业。如何在脚本中实现这一点 到现在为止,我已经完成了如下的工作,并且肯定会有更好的方法来完成Sql server 按条件删除SQL代理作业-脚本,sql-server,sql-server-agent,Sql Server,Sql Server Agent,我想删除当前未运行且描述为“xxxx”的所有SQL代理作业。如何在脚本中实现这一点 到现在为止,我已经完成了如下的工作,并且肯定会有更好的方法来完成 DECLARE @job_owner_name VARCHAR(100) DECLARE @MaxJobs INT declare @RowCnt INT DECLARE @jobId NVARCHAR(36) select @RowCnt = 1 SET @job_owner_name = '' IF OBJECT_ID('tempdb..#
DECLARE @job_owner_name VARCHAR(100)
DECLARE @MaxJobs INT
declare @RowCnt INT
DECLARE @jobId NVARCHAR(36)
select @RowCnt = 1
SET @job_owner_name = ''
IF OBJECT_ID('tempdb..#xp_results') IS NOT NULL
DROP TABLE #xp_results
Declare @xp_results TABLE
( job_id UNIQUEIDENTIFIER NOT NULL,
last_run_date INT NOT NULL,
last_run_time INT NOT NULL,
next_run_date INT NOT NULL,
next_run_time INT NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id SYSNAME COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL
)
INSERT INTO @xp_results
EXEC master.dbo.xp_sqlagent_enum_jobs 1, ''
Declare @jobs TABLE (rownum int IDENTITY (1, 1) Primary key NOT NULL ,
job_id UNIQUEIDENTIFIER NOT NULL)
INSERT INTO @jobs
SELECT rj.job_id
FROM @xp_results rj
INNER JOIN msdb.dbo.sysjobs sj ON sj.job_id = rj.job_id
WHERE rj.running <>1
AND sj.[description] = 'MasterJobHanlder'
SELECT @MaxJobs = COUNT(*) FROM @jobs
WHILE @RowCnt <= @MaxJobs
BEGIN
SELECT @jobId = job_id FROM @jobs WHERE rownum = @rowcnt
SELECT @jobID
EXEC msdb.dbo.sp_delete_job @job_id = @jobid, @delete_unused_schedule=1
Select @RowCnt = @RowCnt + 1
END
还有什么好主意吗?我还没有测试过这么多,但类似这样的东西似乎会奏效:
USE msdb
DECLARE @deleteCmd nvarchar(max);
SET @deleteCmd = '';
SELECT @deleteCmd = @deleteCmd
+ ( 'exec dbo.sp_delete_job @job_name = '''
+ replace( j.name, '''', '''''' ) + '''; '
+ char(10) )
FROM dbo.sysjobs j
WHERE j.[description] like '%foo%'
AND not exists (
SELECT 1
FROM dbo.sysjobactivity a
WHERE a.job_id = j.job_id
AND a.start_execution_date IS NOT NULL
AND a.stop_execution_date IS NULL
)
PRINT @deleteCmd --print for troubleshooting
-- really: EXECUTE( @deleteCmd )
信用证:我还没有做过这么多测试,但类似这样的测试似乎会奏效:
USE msdb
DECLARE @deleteCmd nvarchar(max);
SET @deleteCmd = '';
SELECT @deleteCmd = @deleteCmd
+ ( 'exec dbo.sp_delete_job @job_name = '''
+ replace( j.name, '''', '''''' ) + '''; '
+ char(10) )
FROM dbo.sysjobs j
WHERE j.[description] like '%foo%'
AND not exists (
SELECT 1
FROM dbo.sysjobactivity a
WHERE a.job_id = j.job_id
AND a.start_execution_date IS NOT NULL
AND a.stop_execution_date IS NULL
)
PRINT @deleteCmd --print for troubleshooting
-- really: EXECUTE( @deleteCmd )
信用证:谢谢您的更新。这对我的场景进行了一些小的修改,效果很好。谢谢你的更新。对我的场景进行一些小的修改后,效果很好。