Hig*_*wer 3 sql sql-server common-table-expression
我似乎无法根据 CTE 表达式的结果访问临时表。
如何创建临时表并访问 CTE 中声明的临时表。
在下面的示例中,最后一行将引发错误。
谢谢
DECLARE @tbl TABLE
(
Id int
,ParentId int
)
INSERT INTO @tbl
( Id, ParentId )
select t_package.package_id, t_package.parent_ID from t_package
;
WITH abcd
AS (
-- anchor
SELECT id
,ParentID
,CAST(id AS VARCHAR(100)) AS [Path]
,0 as depth
FROM @tbl
WHERE ParentId = 0
UNION ALL
--recursive member
SELECT t.id
,t.ParentID
,CAST(a.[Path] + ',' + CAST( t.ID AS VARCHAR(100)) AS varchar(100)) AS [Path]
,a.depth +1
FROM @tbl AS t
JOIN abcd AS a ON t.ParentId = a.id
)
SELECT * from abcd;
insert into #TMP (id,parent,branch,depth) (select * from abcd)
Run Code Online (Sandbox Code Playgroud)
子句引入的一组 CTE对于最后一个 CTE 定义后面的单个语句有效WITH。在这里,看来你应该跳过裸露部分并做出以下声明:SELECTINSERT
WITH abcd
AS (
-- anchor
SELECT id
,ParentID
,CAST(id AS VARCHAR(100)) AS [Path]
,0 as depth
FROM @tbl
WHERE ParentId = 0
UNION ALL
--recursive member
SELECT t.id
,t.ParentID
,CAST(a.[Path] + ',' + CAST( t.ID AS VARCHAR(100)) AS varchar(100)) AS [Path]
,a.depth +1
FROM @tbl AS t
JOIN abcd AS a ON t.ParentId = a.id
)
insert into #TMP (id,parent,branch,depth) select * from abcd
select * from #TMP
Run Code Online (Sandbox Code Playgroud)
(我添加了selectfrom,#TMP以便我们仍然获得返回给客户端的结果集,尽管insert和select语句现在已颠倒)。
| 归档时间: |
|
| 查看次数: |
21343 次 |
| 最近记录: |