2008-09-25 9 views
41

Gibt es einen ähnlichen Weg in SQL, um das Folgende zu erreichen, aber mit sql Server Agent Jobs?SQL Server-Agent-Job - Existiert dann Drop?

hier ist, wie ich es tun Verfahren für gespeichert ..

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

Antwort

73

so etwas wie dieses Versuchen:

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' 

Am besten lesen Sie die Dokumentation für alle erforderlichen Parameter für 'sp_add_job' und 'sp_delete_job'

+0

EXEC msdb.dbo.sp_delete_job @job_id sein sollte: EXEC msdb.dbo.sp_delete_job – madcolor

+0

@jobId Wenn SQL Server Management Studio SQL ob besteht die Aufgabe, zu prüfen erzeugt, es verwendet die Ansicht 'msdb.dbo.sysjobs_view'. Keine Ahnung warum, nur eine Beobachtung. – Tom

-2

Sie können ein Skript ausführen Aufgabe erstellen und es als Job laufen ...

2

Wenn Sie das SQL-Skript für einen Job generieren (getestet mit Enterprise Manager), erstellt es automatisch die Prüfung auf Existenz- und Fallanweisungen für Sie. Beispiel unten: -

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 
Verwandte Themen