再帰クエリでカレンダーテーブルを作成する

SQL Serverのヘルプによると,DATETIME型の範囲は1753年1月1日から9999年12月31日までで,規定値は1900年1月1日です.

今回はSQL Server再帰クエリを使用してカレンダーテーブルを作成します.日付の範囲は1900年1月1日から9999年12月31日までとします.


USE CalendarDB;
GO
IF OBJECT_ID('T_CALENDAR') IS NOT NULL
DROP TABLE T_CALENDAR;

CREATE TABLE dbo.T_CALENDAR
(YMD DATETIME NOT NULL);
ALTER TABLE dbo.T_CALENDAR ADD CONSTRAINT pk_T_CALENDAR PRIMARY KEY (YMD);

WITH CTE AS
(SELECT CAST('1900/1/1' AS DATETIME) AS YMD
UNION ALL
SELECT DATEADD(DAY, 1, YMD)
FROM CTE
WHERE CTE.YMD < '9999/12/31')
INSERT INTO dbo.T_CALENDAR
SELECT *
FROM CTE OPTION(MAXRECURSION 0);

(2958464 行処理されました)