3
我正在嘗試創建一個用於處理SQL Server代理作業的相當簡單的腳本。它執行兩個任務:錯誤14274 - 無法刪除然後重新添加作業
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 @[email protected]
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 @[email protected],
@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。任何幫助將非常感謝!