programing

SQL Server 에이전트 작업 - 존재한 후 삭제하시겠습니까?

megabox 2023. 7. 18. 21:37
반응형

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 스크립트를 생성하면(Enterprise Manager를 통해 테스트됨) 자동으로 존재 확인 및 삭제 문이 작성됩니다.아래 예: -

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 

언급URL : https://stackoverflow.com/questions/136771/sql-server-agent-job-exists-then-drop

반응형