1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| -- Si nous avons modifié le nom du site ou l'état du job il faut avant tout vérifier
-- que le job n'est pas en train de s'exécuter et si c'est le cas d'abord arrêter le job
-- code récupérer des procédures systèmes
if(@DSIT02 <> @DSIT02OLD OR @DSIT07 <> @DSIT07OLD)
BEGIN
DECLARE @can_see_all_running_jobs INT
DECLARE @job_owner sysname
DECLARE @job_id uniqueidentifier
SELECT @can_see_all_running_jobs = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0)
IF (@can_see_all_running_jobs = 0)
BEGIN
SELECT @can_see_all_running_jobs = ISNULL(IS_MEMBER(N'SQLAgentReaderRole'), 0)
END
SELECT @job_owner = SUSER_SNAME()
select @job_id = job_id from msdb.dbo.sysjobs where [name] = @DSIT02OLD
DECLARE @xp_results TABLE ( job_id UNIQUEIDENTIFIER NOT NULL,
last_run_date INT NOT NULL,
last_run_time INT NOT NULL,
next_run_date INT NOT NULL,
next_run_time INT NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL, -- BOOL
request_source INT NOT NULL,
request_source_id sysname COLLATE database_default NULL,
running INT NOT NULL, -- BOOL
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
-- SQL Server 8.0 or greater required (Sql 2000)
INSERT INTO @xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id
-- Arrête le job si son état est considéré comme actif, voir doc de msdn pour les valeur 1,2,7
if(exists(select * from @xp_results where job_state in (1,2,7))) |
Partager