You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSMS中将递归生成的日期列存储为数据库表或视图

将递归生成的日期存储为数据库表的方法

你可以通过两种常见方式把递归CTE生成的日期存储为数据库表:

方法1:先创建表再插入数据

首先定义目标表的结构(推荐添加主键约束避免重复数据):

CREATE TABLE CalendarTable (
    orderDate DATE PRIMARY KEY
);

然后修改你的递归查询,将结果插入到新建的表中:

DECLARE @startdate DATE = '2014-01-01';
DECLARE @enddate DATE = '2023-12-31';

WITH calendar AS (
    SELECT @startdate AS [orderDate]
    UNION ALL
    SELECT DATEADD(dd, 1, [orderdate])
    FROM calendar
    WHERE DATEADD(dd, 1, [orderdate]) <= @enddate
)
INSERT INTO CalendarTable (orderDate)
SELECT orderDate FROM calendar
OPTION (MAXRECURSION 0);

方法2:自动创建表并插入数据

使用SELECT INTO语句,无需提前创建表,系统会根据查询结果自动生成表结构:

DECLARE @startdate DATE = '2014-01-01';
DECLARE @enddate DATE = '2023-12-31';

WITH calendar AS (
    SELECT @startdate AS [orderDate]
    UNION ALL
    SELECT DATEADD(dd, 1, [orderdate])
    FROM calendar
    WHERE DATEADD(dd, 1, [orderdate]) <= @enddate
)
SELECT orderDate INTO CalendarTable
FROM calendar
OPTION (MAXRECURSION 0);

注意事项

  • OPTION (MAXRECURSION 0)必须保留,因为你的日期范围跨度较大,超过了SQL Server默认的100次递归限制
  • 如果需要重复执行脚本,可先添加表存在性判断,比如先删除表或清空表数据后再插入
  • 给orderDate列添加主键或唯一约束,能防止意外插入重复日期

内容的提问来源于stack exchange,提问作者oyelowo toyyib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:45:21