我想使用从以下CTE获得的结果作为select语句,以便将其嵌套在另一个查询中-据我了解,您不能使用嵌套在查询中的CTE;
WITH cte_exp AS
(
select
[PrimaryKey],
[SelfKey]
from
MyTable
where PrimaryKey = 1
UNION ALL
select
i.[PrimaryKey],
i.[SelfKey]
from
MyTable i
inner join cte_exp cte
on cte.PrimaryKey = i.SelfKey
)
SELECT 'AAA' AS StandardEntry, [PrimaryKey]
FROM cte_exp
从MyTable-
PrimaryKey | SelfKey
--------------------
1 null
2 1
3 null
4 2
5 4
6 3
7 2
会产生:
StandardEntry | PrimaryKey
--------------------------
AAA 1
AAA 2
AAA 4
AAA 7
AAA 5
但是我希望能够利用此表格输出并将其插入到另一个预先存在的表中,例如:
INSERT INTO AnotherTable ([StandardEntry],[Key]) select * from ( ... the cte as above ... )
我是否需要将其创建为存储过程,或者有什么方法可以包装CTE
观点不好;在CTE之外使用PrimaryKey选择器where PrimaryKey = 1
仅导致一行而不是预期的5行,因此该变量需要在第一条select语句中注入)
答案 0 :(得分:6)
您不是嵌套 CTE,但它们可以成为insert
的一部分:
with cte as (
. . .
)
insert into . . .
select . . .
from cte;
您可以在insert
的语法图中看到它。
请注意,在大多数数据库中,CTE是select
的一部分,因此您可以做自己想做的事情。
答案 1 :(得分:0)
如果您想查询多个级别的数据而无需递归,那么我建议您调查一下hierarchyid数据类型。