Как уже упоминалось, L oop работает на меня. Мне интересно, почему вы сначала используете WHILE L OOP, но давайте пока не будем сомневаться в этом.
Я создал следующий минимальный пример. Давайте предположим, что ваши данные выглядят одинаково, тогда ваши результаты не будут возвращать ничего, потому что Boekdatum не меньше чем StartDate для каждого L oop, но равно StartDate. Поэтому в строке AND Boekdatum <= @Startdate
я заменил =
на <=
и удалил (nolock)
. Может быть, это решит ваш "не работает" L OOP.
DECLARE @FC_GBRMUT table (Rapportagedatum date, Boekdatum date , Rekeningnr int , Bedrag varchar(100), Uw_referentie varchar(100))
INSERT INTO @FC_GBRMUT
SELECT '20200101', '20200101', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200201', '20200201', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200301', '20200301', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200401', '20200401', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200501', '20200501', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200601', '20200601', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200701', '20200701', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200801', '20200801', 14050, 'RandomText', 'RandomText'
UNION SELECT '20200901', '20200901', 14050, 'RandomText', 'RandomText'
UNION SELECT '20201001', '20201001', 14050, 'RandomText', 'RandomText'
UNION SELECT '20201101', '20201101', 14050, 'RandomText', 'RandomText'
UNION SELECT '20201201', '20201201', 14050, 'RandomText', 'RandomText'
DECLARE @Startdate DATE = '20200101';
DECLARE @Enddate DATE = '20210101';
WHILE (@Startdate < @Enddate)
BEGIN
SELECT Rapportagedatum, Boekdatum, Rekeningnr, Bedrag, Uw_referentie
FROM @FC_GBRMUT --(nolock)
WHERE RekeningNr =14050
AND Month(Rapportagedatum) = MONTH(@Startdate) AND Year(Rapportagedatum) = YEAR(@Startdate)
AND Boekdatum <= @Startdate
SET @Startdate = DATEADD(m,1,@Startdate)
END