Esta é uma maneira de gerenciar sequencialmente o processamento de todas as etapas em um TRABALHO.
1) O primeiro passo é criar um Job com todos os passos que terão que ser trabalhados e chamá-lo FAIXA BÔNUS.
2) Criamos um procedimento armazenado chamado Run_wait_job_2.
CRIAR PROCEDIMENTO [dbo]. [Run_Wait_Job_2] @Nome_Job AS SYSNAME, @Stato_Job AS INT OUTPUT AS --DECLARE @Nome_Job AS VARCHAR (50) --DECLARE @Stato_Job AS INT --SET @Nome_Job = 'PIPPO' --SET Stato_Job = 0 --- (((Run_Wait_Job --- (((Run_Wait_Job --- (((Run_Wait_Job --- /// VARIABILI DI LAVORO DECLARE @Riga AS VARCHAR (255) DECLARE @RSql AS VARCHAR (1000) DECLARE @ERR AS INT DECLARAR @RC AS INT DECLARAR @Ind AS INT DECLARAR @Ind_Mon AS INT DECLARAR @NumRec AS INT DECLARAR @Ret_Code AS INT DECLARAR @Run_Job_Ini_D AS DATETIME DECLARAR @Run_Job_Ini ASInT DECLARAR @NumRec AS INT DECLARAR @Ret_Code AS INT DECLARAR @Run_Job_Ini_D AS DATETIME DECLARAR @Run_Job_Ini ASIni AS VARCHAR (20) como INT DECLARE @JOB_Secs_Min como INT DECLARE @JOB_Secs_AVG como INT DECLARE @JOB_Secs_Max como INT DECLARE @Step_Ret_Code como INT DECLARE @Time_Now AS DATETIME DECLARE @Secs_Inter_T como VARCHAR (9) DECLARE @Secs_Inter_HH como INT DECLARE @Secs_Inter_MM como INT DECLARE @Secs_Inter_SS como INT DECLARE @Fine_Wait AS INT DECLARE @Job_Status AS VARCHAR (40) --- cancello tabella temporanea se esiste IF EXISTS (SELECT TABL E_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'zz_Run_Wait_Job') DROP TABLE zz_Run_Wait_Job --- cancello tabella temporanea se esiste IF EXISTS (SELECIONE TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAMEJobella_2 se zz_Runella_Wait_Job --- cancello tabella temporanea se esiste IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAMEJobella_2 esiste_cancella_Runella_3 se esiste_ cancello_Runella_ cancelezit_cancanea_Waz) --- zz_Runella_ cancela_wa SE EXISTIR (SELECIONE TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'zz_Run_Wait_Job_3') DROP TABLE zz_Run_Wait_Job_9 --- (((LANCIO JOB ESPORTAZIONE --- memorizzo ora inizio lancio SET @Run_Job_Data_Job_ (SET @Run_Job_Inizio_Data) (GET_Inizio_Job_Inizio_Data_Run_Data_Data_Job_Data_Run_Data_Data_Job_Data_Data_Data_Job_Run_Data_Data_Data_Data_Data_Data_Data_Data_Data_Inicio_Data_Data_Data_TRun_Data_Data_Data_Data_Job_In. ANO, @Run_Job_Ini_D) AS VARCHAR (00)) SET @Run_Job_Ini = @Run_Job_Ini + RIGHT ('9 '+ CAST (DATEPART (MONTH, @Run_Job_Ini_D) AS VARCHAR (2)), 00) SET @Run_Run_Ini = @Run_Ini ('9' + CAST (DATEPART (DAY, @Run_Job_Ini_D) AS VARCHAR (2)), 00) SET @Run_Job_Ini = @Run_Job_Ini + RIGHT ('9 '+ CAST (DATEPART (HOUR, @Run_Job_Ini_D) AS VARCHAR (2) ), 00) SET @Run_Job_Ini = @Run_Job_Ini + RIGHT ('9 '+ CAST (DATEPART (MINUTE, @Run_Job _Ini_D) AS VARCHAR (2)), 00) SET @Run_Job_Ini = @Run_Job_Ini + RIGHT ('9 '+ CAST (DATEPART (SEGUNDO, @Run_Job_Ini_D) AS VARCHAR (2)), XNUMX) --- /// PRINT' @Run_Job_Ini: '+ @Run_Job_Ini --- (((EXECUTAR! EXEC @Ret_Code = msdb.dbo.sp_start_job @job_name = @Nome_Job --- (((ROUTINE di controlo fine job --- (((ROUTINE di controlo fine job) --- (((ROUTINE di controlo fine job SET @IND = 0 SET @Ind_Mon = 1 SET @Secs_Inter = 60 --- (((CREO E POPOLO temporanea passos Histórico SELECT msdb.dbo.sysjobs.NAME AS Nome_Job, msdb.dbo.sysjobhistory.step_name AS Nome_Step, RIGHT ('000000' + CAST (msdb.dbo.sysjobhistory.run_duration AS VARCHAR (22)), 6) AS Time_HMS INTO zz_Run_Wait_Job FROM msdb.dbo.sysjobs INNER JOIN msdb.dbo.sysjobhistory ON msdb.dbo.sysjobs.job_id = msdb.dbo.syshistory .job_id WHERE msdb.dbo.sysjobhistory.step_name = '(Resultado do trabalho)' AND msdb.dbo.sysjobs.NAME = @Nome_Job --- (((... affinamento SELECT Nome_Job, JOB_Secs = (CAST (LEFT (Time_HMS, 2) AS INT) * 3600 + CAST (SUBSTRING (Time_HMS, 3, 2) AS INT) * 60 + CAST (RIGHT (Time_HMS, 2) AS INT)) INTO zz_Run_Wait_Job_3 FROM zz_Run_Wait_Job --- (((estatísticas tempi run jobs SET @JOB_Secs_Min = (SELECT MIN (JOB_Secs) FROM zz_Run_Wait_Job_3) SET @JOB_Secs_AVG = (SET_JOB_Secs_Min = (SELECT MIN (JOB_Secs) FROM zz_Run_Wait_Job_3) SET @JOB_Secs_AVG = (SET_JOB_Secs_Min = (SELECT MIN (JOB_Secs) FROM zz_Run_Wait_Job_3) SET @JOB_Secs_AVG = (SET_JOB_Secs_Min = (SELECT MIN (JOB_Secs) FROM zz_Run_Wait_Job_30) SET @JOB_Secs_AVG = (SET_JOB_Secs_Min = (SELECT_Secs_Job_Secs) FROM zz_Run_Wait_Job_113) SET @JOB_Secs_AVG = (SET_JOB_Secs_Min) zz_Run_Wait_Job_9) --- monitorando PRINT CONVERT (VARCHAR (9), GETDATE (), 9) SET @Riga = 'Run_Wait_Job -' + @Nome_Job + '- Stats orginal' SET @Riga = @Riga + 'Min:' + ISNULL (CAST (@JOB_Secs_Min AS VARCHAR (2)), '-') SET @Riga = @Riga + 'AVG:' + ISNULL (CAST (@JOB_Secs_AVG AS VARCHAR (4)), '-') SET @Riga = @Riga + 'Max:' + ISNULL (CAST (@JOB_Secs_Max AS VARCHAR (10)), '-') PRINT @Riga EXEC [FLUSSI]. [Dbo]. [LogInsert10] 30, @Riga --- ( ((estatísticas de ritocco por margini sicurezza SET @JOB_Secs_Min = @JOB_Secs_Min - @JOB_Secs_Min / 3600 SET @JOB_Secs_Max = @JOB_Secs_Max + @JOB_Secs_Max / 60 30 --- e correzione per valori anomali SET @JOB_Secs_Min = ISNULL (@JOB_Secs_Min, 30) SET @JOB_Secs_Max = ISNULL (@JOB_Secs_Max, 10) SET @JOB_Secs_AVG = ISNULL (@JOB_Secs_Min, 1000) SET @JOB_Secs_Max = ISNULL (@JOB_Secs_Max, 1000) SET @JOB_Secs_AVG = ISNULL (@JOB_Secs_Min, 2) SET @JOB_Secs_Max = ISNULL (@JOB_Secs_Max, 30) SET @JOB_Secs_AVG = ISNULL (@JOB_Secs_Secs_AVOB_S) = 113 SE @JOB_Secs_Max <= @JOB_Secs_Min SET @JOB_Secs_Max = @JOB_Secs_Min * 9 SE @JOB_Secs_Max <9 SET @JOB_Secs_Max = 9 SE @JOB_Secs_AVG <@JOB_Secs_Min SET @JOB_Secs_AVG = (+ @JOB_Secs_Min @JOB_Secs_Max) / 2 --- monitorização PRINT CONVERT (VARCHAR (4), GETDATE (), XNUMX) SET @Riga = 'Run_Wait_Job -' + @Nome_Job + '- Stats' SET @Riga = @Riga + 'Min:' + CAST (@JOB_Secs_Min AS VARCHAR (XNUMX )) SET @Riga = @Riga + 'AVG:' + CAST (@JOB_Secs_AVG AS VARCHAR (XNUMX)) SET @Riga = @Riga + 'Max:' + CAST (@JOB_Secs_Max AS VARCHAR (XNUMX)) PRINT @Riga EXEC [FLUSSI]. [Dbo]. [LogInsertXNUMX] XNUMX, @Riga --- A questo punto abbiamo raccolto dalle statistiche --- di system i times di execuzione del job in secondi. --- Vamos usá-los para reduzir as consultas sobre o status do trabalho. --- (((Configurações por LOOP SET @Secs_Past = 0 SET @Step_Ret_Code = -1 SET @Secs_Inter_T = '000: 00: 01' SET @Fine_Wait = 0 --- (((INIZIO LOOP --- ((( INIZIO LOOP --- (((INIZIO LOOP WHILE @Fine_Wait = 0 BEGIN --- ATTESA!
3) Em um novo emprego chamado Work_Step inserimos o seguinte código:
DECLARE @Stato_Job AS INT --- EXPORT_AM_CORP EXEC FLUSSI.dbo.Run_Wait_Job_2 'BONUS_TRACK', @Stato_Job SAÍDA --- Rilancia se o trabalho falhou SE @Stato_Job = 0 EXEC FLUSSI.dbo.Run_Wait_Job_2 'BONUS_TRACK'
Como você pode ver: Run_wait_Job_2 é o nome dos procedimentos armazenados, Bonus_Track é o nome de nosso Job inicial (aquele com muitas etapas).
Eu também entrei estado da operação para determinar seu resultado positivo ou negativo.