2008-09-25 6 views
41

SQL에서 다음과 같은 방법으로 SQL Server 에이전트 작업을 수행 할 수 있습니까? 여기SQL Server 에이전트 작업 - 존재하고 삭제 하시겠습니까?

내가 저장 프로 시저 위해 그것을 할 방법은 ..

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] ... 

답변

73

이 같은 시도 :

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'에 필요한 문서를 읽는 것이 가장 좋습니다.

+0

EXEC의 msdb.dbo.sp_delete_job는해야 을 @job_id : SQL Server 관리 스튜디오 작업이 존재하는지 여부를 확인하기 위해 SQL을 생성 할 때 EXEC의 msdb.dbo.sp_delete_job는 – madcolor

+0

을 @jobId, 그것을 'msdb.dbo.sysjobs_view'보기를 사용합니다. 이유는 모르겠다. 관찰 일 뿐이다. – Tom

-2

당신은 스크립트 실행 작업을 만들고 작업으로 실행할 수 있습니다 ...

2

작업 (엔터프라이즈 관리자로 테스트 됨)에 대한 SQL 스크립트를 생성하면 자동으로 존재 성 및 드롭 문에 대한 검사가 작성됩니다. 아래의 예 : -

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 
13
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