Skip to content

Instantly share code, notes, and snippets.

@Tgo1014
Created Mar 22, 2017
Embed
What would you like to do?
Auto reagendamento de job para o primeiro dia útil do mês seguinte após carregar tabela
DECLARE @DIA_UTIL INT
DECLARE @PROXIMO_DIA_UTIL VARCHAR(8)
DECLARE @PRIMEIRO_DIA_UTIL_MES_SEGUINTE VARCHAR(8)
/*****************************************************************************************************************/
--VERIFICA DIAS ÚTEIS
/*****************************************************************************************************************/
--TABELA DIAS UTEIS
IF OBJECT_ID('TEMPDB..#DIA_UTEIS_MES_ATUAL') IS NOT NULL
DROP TABLE #DIA_UTEIS_MES_ATUAL
SELECT
ID = ROW_NUMBER() OVER ( PARTITION BY CONVERT(VARCHAR(6),DATA,112) ORDER BY CONVERT(VARCHAR(6),DATA,112) )
,DATA
INTO
#DIA_UTEIS_MES_ATUAL
FROM
DB_PGC_PRODUCAO..TB_ESTRUTURA_CALENDARIO
WHERE
CONVERT(VARCHAR(6),DATA,112) = CONVERT(VARCHAR(6),GETDATE(),112)
AND DIA_UTIL = 1
--DIA UTIL DIA PROCESSAMENTO
SELECT @DIA_UTIL = ID FROM #DIA_UTEIS_MES_ATUAL WHERE DATA = CONVERT(VARCHAR(10),GETDATE(),112)
--PROXIMO DIA ÚTIL
SELECT @PROXIMO_DIA_UTIL = CONVERT(VARCHAR(8),DATA,112) FROM #DIA_UTEIS_MES_ATUAL WHERE ID = @DIA_UTIL + 1 --PRÓXIMO DIA ÚTIL
--PRIMEIRO DIA ÚTIL DO MÊS SEGUINTE
SELECT TOP 1
@PRIMEIRO_DIA_UTIL_MES_SEGUINTE = CONVERT(VARCHAR(8),DATA,112)
FROM
DB_PGC_PRODUCAO..TB_ESTRUTURA_CALENDARIO
WHERE DIA_UTIL = 1
AND CONVERT(VARCHAR(6),DATA,112) = CONVERT(VARCHAR(6),DATEADD(M,1,GETDATE()),112)
ORDER BY 1
/*****************************************************************************************************************/
--VERIFICA QUAL O DIA ÚTIL DO DIA DO PROCESSAMENTO
/*****************************************************************************************************************/
--O ARQUIVO PODE SER DISPONIBILIZADO ATÉ O 5ºDIA ÚTIL, NESTE CASO O PROCESSO VERIFICAR O DIA ÚTIL, CASO AINDA NÃO
--SEJA O 5º, AGENDA PARA O PRÓXIMO DIA ÚTIL, CASO SEJA E O ARQUIVO AINDA NÃO TENHA SIDO CARREGADO, EXIBE UM ERRO
--CASO ARQUIVO NÃO TENHA SIDO CARREGADO
IF (
SELECT TOP 1 CD_DIRETOR_DEPART
FROM DB_PGC_PRODUCAO..TB_MERCADO_ALVO_CORP_EMP
WHERE DT_ANOMES_REF = CONVERT(VARCHAR(6),DATEADD(M,-1,GETDATE()),112) AND DS_SEGMENTO_1 = 'EMPRESAS') IS NULL
OR
(
SELECT TOP 1 CD_DIRETOR_DEPART
FROM DB_PGC_PRODUCAO..TB_MERCADO_ALVO_CORP_EMP
WHERE DT_ANOMES_REF = CONVERT(VARCHAR(6),DATEADD(M,-1,GETDATE()),112) AND DS_SEGMENTO_1 = 'CORPORATE') IS NULL
BEGIN
--VERIFICA DATA LIMITE DO 5º DIA ÚTIL
IF (@DIA_UTIL >= 5)
BEGIN
--CASO O ARQUIVO NÃO TENHA CHEGO ATÉ O 5º DIA ÚTIL, AGENDA PARA O PROXIMO MES E EXIBE UM ERRO PARA QUE POSSA SER
--VERIFICADO
EXEC MSDB.DBO.SP_UPDATE_JOBSCHEDULE
@JOB_NAME = 'TB_MERCADO_ALVO_CORP_EMP'
,@NAME = 'MENSAL' --NOME DO JOB
,@ENABLED = 1 --HABILITA JOB
,@FREQ_TYPE = 1 --EXECUTAR APENAS 1 VEZ
,@ACTIVE_START_DATE = @PRIMEIRO_DIA_UTIL_MES_SEGUINTE --DIA QUE SERÁ EXECUTADO
,@ACTIVE_START_TIME = '070000' --07:00
RAISERROR ('ARQUIVO DE EMPRESAS E/OU CORPORATE NÃO CARREGADO! DATA LIMITE DO 5º DIA ÚTIL!',16,-1);
END
ELSE
BEGIN
--AGENDA JOB PARA O PRÓXIMO DIA ÚTIL
EXEC MSDB.DBO.SP_UPDATE_JOBSCHEDULE
@JOB_NAME = 'TB_MERCADO_ALVO_CORP_EMP'
,@NAME = 'MENSAL' --NOME DO JOB
,@ENABLED = 1 --HABILITA JOB
,@FREQ_TYPE = 1 --EXECUTAR APENAS 1 VEZ
,@ACTIVE_START_DATE = @PROXIMO_DIA_UTIL --DIA QUE SERÁ EXECUTADO
,@ACTIVE_START_TIME = '070000' --07:00
END
END
--CASO EXECUTE COM SUCESSO, AGENDA PARA O MÊS SEGUINTE
EXEC MSDB.DBO.SP_UPDATE_JOBSCHEDULE
@JOB_NAME = 'TB_MERCADO_ALVO_CORP_EMP'
,@NAME = 'MENSAL' --NOME DO JOB
,@ENABLED = 1 --HABILITA JOB
,@FREQ_TYPE = 1 --EXECUTAR APENAS 1 VEZ
,@ACTIVE_START_DATE = @PRIMEIRO_DIA_UTIL_MES_SEGUINTE --DIA QUE SERÁ EXECUTADO
,@ACTIVE_START_TIME = '070000' --07:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment