Zahlen zu verwenden ist besser, aber Sie würden ein DB-Objekt erstellen müssen. Sie können auch
DECLARE @tbl TABLE(
DateValue DATETIME
)
DECLARE @startDate DATETIME = '2010-01-01'
DECLARE @endDate DATETIME = '2050-01-01'
DECLARE @seqDays INT;
SELECT @seqDays = DATEDIFF(d, @startDate,@endDate)
DECLARE @val INT = 1
WHILE(@val <= @seqDays)
BEGIN
INSERT INTO @tbl VALUES(DATEADD(day, @val, @startDate))
SET @val = @val + 1
END
SELECT * FROM @tbl
Oder für die Zahlen Tabelle Option eine einfache Tabelle Variable und eine while-Schleife verwenden, in einer anderen Antwort, beschrieben von @Dymeng, können Sie Ihre eigenen Tabellenvariable erstellen und mit diesem verbinden. Du hättest SEQUENCE auch verwenden können, aber das wird für eine einfachere Sache übertrieben sein.
DECLARE @tbl TABLE(
DateValue DATETIME
)
DECLARE @startDate DATETIME = '2010-01-01'
DECLARE @endDate DATETIME = '2050-01-01'
DECLARE @seqDays INT;
SELECT @seqDays = DATEDIFF(d, @startDate,@endDate)
DECLARE @tbl TABLE(
DateInc INT IDENTITY(1,1)
)
DECLARE @val INT = 1
WHILE(@val <= @seqDays)
BEGIN
INSERT INTO @tbl DEFAULT VALUES
SET @val= @val + 1
END
SELECT DATEADD(day, a.DateValue, @startDate) FROM @tbl a
40 Jahre sind 14,310 Tage - ich würde einen Stapelfehler von dieser tiefen Rekursion erwarten. – Brian
@Brian bearbeitet, machte es 15000, ich habe nicht die Lösung mit maxrecusion (0) getestet, schrieb es, oben auf meinem Kopf. –