将 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)
。
对于有点复杂的 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)
。