Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quinta-feira, 17 de março de 2011

Preenchendo tabela com todos os dias do ano e periodo de referencia

Eu precisei criar uma tabela com periodo de referencia no formato 'YYYYMM' e os dias DDMMYYYY desde 01 janeiro de 2011 a 31 de dezembro de 2011.

Para não ter ficar fazendo um Insert a cada dia, um loop que o SQL Server faça isso para mim, criei o seguinte script:

--Declaro as variaveis
Declare @DtInicial As Datetime
Declare @DtFinal As Datetime
Declare @Mes As Int
--Inicializo as variaveis com um valor
Set @DtInicial = '01/01/2011'
Set @DtFinal = '31/12/2011'
Set @Mes = '201101'

--Fará o loop até que a data inicial seja menor/igual a data final
WHILE (@DtInicial <= @DtFinal)
BEGIN
/*Abaixo incrementa o mês de referencia, convertendo para varchar com isso uso capturo apenas o mês e
--comparo com o mes atual do @DtInicial, caso o mês seja igual então @Mes , se não, incremendo 1
@Mes+1*/

SET @Mes = Case when Cast(SUBSTRING(cast(@Mes as Varchar), 5,2) as int) = MONTH(@DtInicial)
                Then @Mes
                else @Mes+1
            end
--Insere a o valor do dia e mês de referencia na tabela dbo.Periodo_ref
INSERT INTO dbo.Periodo_ref(PERIODOREF,PERIODO)  VALUES (@DtInicial, @Mes)
--Incrementa 1 o DtInicial

SET @DtInicial = @DtInicial+1
END
GO



Script sem comentários:

Declare @DtInicial As Datetime
Declare @DtFinal As Datetime
Declare @Mes As Int
Set @DtInicial = '01/01/2011'
Set @DtFinal = '31/12/2011'
Set @Mes = '201101'

WHILE (@DtInicial <= @DtFinal)
BEGIN
SET @Mes = Case when Cast(SUBSTRING(cast(@Mes as Varchar), 5,2) as int) = MONTH(@DtInicial)
                Then @Mes
                else @Mes+1
            end

INSERT INTO dbo.Periodo_ref(PERIODOREF,PERIODO)  VALUES (@DtInicial, @Mes)
SET @DtInicial = @DtInicial+1
END
GO


Caso alguém tenha uma sugestão de como melhorar o script é só postar!!!

Nenhum comentário:

Postar um comentário

Related Posts Plugin for WordPress, Blogger...