Ошибка 14274 - Невозможно удалить, а затем повторно добавить работу - PullRequest
3 голосов
/ 19 июня 2010

Я пытаюсь создать довольно простой скрипт для работы с заданиями агента SQL Server.Он выполняет 2 задачи:

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));

Я запускаю его на SQL 2008 SP1.Любая помощь будет очень ценится!

1 Ответ

6 голосов
/ 21 июня 2010

На самом деле я понял это после некоторого дурачения.

Кажется, что необходимо установить для переменной @JobId значение NULL между операторами, которые удаляют и создают работу. Как только вы это сделаете, ошибка исчезнет, ​​и она заработает.

Надеюсь, это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...