Procedure SQL Server 2008 para gerar feriados moveis

/*
Autores: Ricardo / Luciano
Banco de Dados : SQL Server 2008
Descrição: Procedure Para Gerar Feriados Bancários..
*/


USE [Financeiro]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[FeriadoSP]
 @ANOATUAL AS INT

AS
DECLARE @dia INT, @mes INT, @ano INT, @a INT, @b INT, @c INT, @d INT, @e INT, @f INT,
@g int,@h int, @i int, @k int, @l INT, @m INT, @p INT, @q INT, @pascoa smalldatetime,
@carnaval smalldatetime,@paixao smalldatetime, @corpus smalldatetime, @DiaSemana varchar(15)

--Limpa a tabela feriado
delete Feriado

SET @dia = DAY(GETDATE())
SET @mes = MONTH(GETDATE())



IF @ANOATUAL > 0
BEGIN
SET @ano = @ANOATUAL
END
ELSE
IF @ANOATUAL < 1
BEGIN
SET @ano = YEAR(getdate()) 
END 



SET @a = (@ano % 19)
SET @b = @ano / 100
SET @c = (@ano % 100)
SET @d = @b / 4
SET @e = (@b % 4)
SET @f = ((@b + 8) / 25)
SET @g = ((@b-@f+1)/3)
SET @h = ((19*@a+@b-@d-@g+15)%30)
SET @i = @c / 4
SET @k = (@c % 4)
SET @l = ((32+2*@e+2*@i-@h-@k)%7)
SET @m = ((@a+11*@h+22*@l)/451)
SET @p = ((@h+@l-7*@m+114)/31)
SET @q = ((@h+@l-7*@M+114) % 31)

SET @pascoa = cast(@ano as varchar)+'/'+cast(@p as varchar)+'/'+cast(@q+1 as varchar)
SET @carnaval = @pascoa - 47
SET @paixao = @pascoa -2
SET @corpus=@pascoa + 60



--Insere os registros na tabela feriado
INSERT INTO dbo.Feriado (Data,Feriado,Dia,DiaInt) values (@carnaval,'Carnaval',DATEPART(w,GETDATE()),CAST(getdate() as integer))
INSERT INTO dbo.Feriado (Data,Feriado,Dia,DiaInt) values (@paixao,'Paixão de Cristo',DATEPART(w,GETDATE()),CAST(getdate() as integer))
INSERT INTO dbo.Feriado (Data,Feriado,Dia,DiaInt) values (@corpus,'Corpus Christi',DATEPART(w,GETDATE()),CAST(getdate() as integer))
INSERT INTO dbo.Feriado(Data,Feriado,Dia,DiaInt) select Data,Feriado,Dia,DiaInt from dbo.TempFeriado
update financeiro.dbo.Feriado set data = (cast(@ano as varchar) +'/'+ cast(MONTH(data) as varchar) + '/' + cast(DAY(data) as varchar))

--Atualiza para o dia da semana por extenso, com a data passada por parametro
UPDATE [Financeiro].[dbo].[Feriado] 
SET 
DiaInt = CAST(Data as integer) ,
Dia = CASE DATEPART(WEEKDAY,Feriado.Data)
WHEN 1 THEN 'Domingo'
WHEN 2 THEN 'Segunda-feira'
WHEN 3 THEN 'Terça-feira'
WHEN 4 THEN 'Quarta-feira'
WHEN 5 THEN 'Quinta-feira' 
WHEN 6 THEN 'Sexta-feira'
WHEN 7 THEN 'Sábado'
END

--Atualiza para o ano de acordo com o campo selecionado !!
update financeiro.dbo.Feriado set data = (cast(@ANOATUAL as varchar) +'/'+ cast(MONTH(data) as varchar) + '/' + cast(DAY(data) as varchar))

Nenhum comentário:

Postar um comentário