Om det inte är mer än 2047 dagar mellan dina datum:
declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)
select dateadd(day, number, @dt)
from
(select number from master.dbo.spt_values
where [type] = 'P'
) n
where dateadd(day, number, @dt) < @dtEnd
Jag uppdaterade mitt svar efter flera förfrågningar om att göra det. Varför?
Det ursprungliga svaret innehöll underfrågan
select distinct number from master.dbo.spt_values
where name is null
som ger samma resultat som jag testade dem på SQL Server 2008, 2012 och 2016.
Men när jag försökte analysera koden som MSSQL internt när jag frågade från spt_values
, fann jag att SELECT
satser innehåller alltid satsen WHERE [type]='[magic code]'
.
Därför bestämde jag mig för att även om frågan returnerar det korrekta resultatet, levererar den rätt resultat av felaktiga skäl:
Det kan finnas en framtida version av SQL Server som definierar en annan [type]
värde som också har NULL
som värden för [name]
, utanför intervallet 0-2047, eller till och med icke-sammanhängande, i vilket fall resultatet helt enkelt skulle bli fel.