Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 错误14274-无法删除并重新添加作业_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 错误14274-无法删除并重新添加作业

Sql server 错误14274-无法删除并重新添加作业,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我试图创建一个相当简单的脚本来处理SQLServer代理作业。它执行两项任务: 1如果给定作业存在,请将其删除 2.创造就业机会 由于业务需求,我无法修改现有作业,脚本必须删除并重新创建它 第一次运行脚本可以很好地创建作业。在此之后运行任何时间都会产生错误14274,无法添加、更新或删除源自MSX服务器的作业 我对此做了大量搜索,大多数解决方案都围绕正在更改的服务器名称进行搜索。我的服务器名从未更改,也从未更改过 以下是我所拥有的: USE [msdb]; SET NOCOUNT ON; D

我试图创建一个相当简单的脚本来处理SQLServer代理作业。它执行两项任务:

1如果给定作业存在,请将其删除 2.创造就业机会

由于业务需求,我无法修改现有作业,脚本必须删除并重新创建它

第一次运行脚本可以很好地创建作业。在此之后运行任何时间都会产生错误14274,无法添加、更新或删除源自MSX服务器的作业

我对此做了大量搜索,大多数解决方案都围绕正在更改的服务器名称进行搜索。我的服务器名从未更改,也从未更改过

以下是我所拥有的:

USE [msdb];

SET NOCOUNT ON;

DECLARE @JobName NVARCHAR(128);
DECLARE @ReturnCode INT;
declare @errCode INT;

SET @JobName = 'AJob';

BEGIN TRANSACTION;

DECLARE @jobId uniqueidentifier;

SET @jobId = (SELECT job_id from msdb.dbo.sysjobs where name = @JobName);

IF(@jobId IS NOT NULL) -- delete if it already exists
begin
   EXEC @ReturnCode = msdb.dbo.sp_delete_job @job_id=@jobId
   IF(@@ERROR <> 0 OR @ReturnCode <> 0)
    begin
        set @errCode = @@ERROR;
        GOTO QuitWithRollback;
    end
    print 'deleted job';   
end


-- create the job
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@JobName,
        @enabled=1,
        @notify_level_eventlog=0, -- on failure
        @notify_level_email=0,
        @notify_level_netsend=0, -- never
        @notify_level_page=0,
        @delete_level=0,
        @description=NULL,
        @owner_login_name=N'sa',
        @notify_email_operator_name=NULL,
      @job_id = @jobId OUTPUT
IF(@@ERROR <> 0 OR @ReturnCode <> 0)
begin
    set @errCode = @@ERROR;
   GOTO QuitWithRollback;
end
print 'added job';

-- Server
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver
   @job_id = @jobId
IF(@@ERROR <> 0 OR @ReturnCode <> 0)
   GOTO QuitWithRollback;

COMMIT TRANSACTION;
RETURN;

QuitWithRollback:
   IF(@@TRANCOUNT > 0)
      ROLLBACK TRANSACTION;
   print 'Err: ' + CAST(@errCode AS varchar(10)) + ' ret: ' + cast(@ReturnCode as varchar(10));

我正在SQL2008SP1上运行它。任何帮助都将不胜感激

事实上,我是在胡闹了一番之后才弄明白这一点的

似乎有必要在删除和创建作业的语句之间将@JobId变量设置为NULL。一旦你这样做了,错误就会消失,它就会工作


我希望这对别人有帮助

我在循环中执行删除和添加操作。将值设置为NULL会有所帮助。每次调用sp_add_job之前,ThanksSET@jobid=NULL