Eu tava com preguiça de ficar dropando e recriando a tabela na mão, da eu ja coloquei no inicio a validação de existência e ao invés de setar a primeira e a última data eu consultei na tabela o min e o max e utilizei essa info pra rodar exatamente o quanto precisa.
IF OBJECT_ID('PRODUCAO_NOTAS') IS NOT NULL
DROP TABLE PRODUCAO_NOTAS
CREATE TABLE PRODUCAO_NOTAS (
[DATA_NOTA] DATE,
[QUANTIDADE] INT
)
GO
SET NOCOUNT ON
DECLARE @DATAINICIAL DATE
DECLARE @DATAFINAL DATE
DECLARE @NUMNOTAS INT
SELECT @DATAINICIAL = MIN(DATA) FROM [NOTAS FISCAIS]
SELECT @DATAFINAL = MAX(DATA) FROM [NOTAS FISCAIS]
WHILE @DATAINICIAL <= @DATAFINAL
BEGIN
SELECT @NUMNOTAS = COUNT(*) FROM [NOTAS FISCAIS]
WHERE DATA = @DATAINICIAL
INSERT INTO PRODUCAO_NOTAS (
[DATA_NOTA],
[QUANTIDADE]
)
VALUES(
@DATAINICIAL,
@NUMNOTAS
)
SELECT @DATAINICIAL = DATEADD(DAY, 1, @DATAINICIAL)
END
SELECT * FROM PRODUCAO_NOTAS