SQL Server代理作业 – 存在然后丢弃?

在SQL中有没有类似的方式来实现以下,但与SQL服务器代理作业,而不是?

这里是我如何做存储过程。

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[storedproc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[storedproc] GO CREATE PROCEDURE [dbo].[storedproc] ... 

尝试这样的事情:

 DECLARE @jobId binary(16) SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'Name of Your Job') IF (@jobId IS NOT NULL) BEGIN EXEC msdb.dbo.sp_delete_job @jobId END DECLARE @ReturnCode int EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Name of Your Job' 

最好阅读关于“sp_add_job”和“sp_delete_job”所需的所有参数的文档

 IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'Your Job Name') EXEC msdb.dbo.sp_delete_job @job_name=N'Your Job Name' , @delete_unused_schedule=1 

如果为作业生成SQL脚本(使用企业pipe理器进行testing),则会自动为您创build存在和删除语句的检查。 下面的例子:

 DECLARE @JobID BINARY(16) DECLARE @ReturnCode INT SELECT @ReturnCode = 0 -- Delete the job with the same name (if it exists) SELECT @JobID = job_id FROM msdb.dbo.sysjobs WHERE (name = N'My test job') IF (@JobID IS NOT NULL) BEGIN -- Check if the job is a multi-server job IF (EXISTS (SELECT * FROM msdb.dbo.sysjobservers WHERE (job_id = @JobID) AND (server_id <> 0))) BEGIN -- There is, so abort the script RAISERROR (N'Unable to import job ''My test job'' since there is already a multi-server job with this name.', 16, 1) END ELSE -- Delete the [local] job EXECUTE msdb.dbo.sp_delete_job @job_name = N'My test job' SELECT @JobID = NULL END 

您可以创build一个运行脚本任务并将其作为一个工作来运行…