通过CTE使用INSERT

Chr*_*ris 1 sql sql-server common-table-expression

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

WITH days_mapping AS (SELECT 1 AS day
UNION ALL
SELECT 2 AS day
UNION ALL
...
SELECT 31 AS day)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以创建相同的映射,但是无需手动为该映射中的每个数字/天手动编写SELECT和UNION ALL?我当时想在WHILE循环中执行INSERT而不是SELECT,但是我不知道如何或是否有可能使用通用表表达式来执行此操作。

Gor*_*off 5

您可以使用递归CTE:

with days_mapping as (
      select 1 as day
      union all
      select day + 1
      from days_mapping
      where day < 31
     )
select *
from days_mapping;
Run Code Online (Sandbox Code Playgroud)

是db <>小提琴。

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

  • 请注意,当CTE编写得很差时,“ option(maxrecursion 0)”会导致无限循环.. **在这种情况下不,注释是一般警告... (2认同)