将 INSERT 与 CTE 结合使用

Using INSERT with CTE

对于有点复杂的 SQL 脚本,我需要以下映射:

WITH days_mapping AS (SELECT 1 AS day
UNION ALL
SELECT 2 AS day
UNION ALL
...
SELECT 31 AS day)

有没有什么方法可以创建相同的映射,但无需为每个应该在此映射中的 number/day 手动编写 SELECT 和 UNION ALL?我正在考虑在 WHILE 循环而不是 SELECT 中执行 INSERT,但我不知道如何或是否可以使用常见的 table 表达式来执行此操作。

您可以使用递归 CTE:

with days_mapping as (
      select 1 as day
      union all
      select day + 1
      from days_mapping
      where day < 31
     )
select *
from days_mapping;

Here 是一个 db<>fiddle.

注意:如果生成的行超过 100 行,则需要在查询末尾使用 option (maxrecursion 0)