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