【发布时间】:2013-10-16 15:10:29
【问题描述】:
以下代码产生:语句终止。在语句完成之前,最大递归 100 已用完。
我正在尝试建立一个包含所有父母和孩子的列表。 ArtikelCEId = 7 是硬编码的例子。
仅使用 1 个 UNION ALL(查找父母或孩子)运行 CTE 效果很好。
同种编码描述于:http://sqlmag.com/t-sql/ctes-multiple-recursive-members
create table Article(
ArtikelCEId int,
VervangenDoorArtikelCEId int
)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (1, 2)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (2, null)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (3, null)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (5, 7)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (7, 8)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (8, null)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (9, null)
insert into Article (ArtikelCEId, VervangenDoorArtikelCEId ) values (10, null)
;
WITH ArtikelCE_CTE(ArtikelCEId, VervangenDoorArtikelCEId) AS
(
SELECT a.ArtikelCEId, a.VervangenDoorArtikelCEId
from Article a
where a.ArtikelCEId = 7
/*find parents */
UNION ALL
SELECT b.ArtikelCEId, b.VervangenDoorArtikelCEId
FROM ArtikelCE_CTE acteP
INNER JOIN Article b
ON b.ArtikelCeId = acteP.VervangenDoorArtikelCEId
/*find childs */
UNION ALL
SELECT c.ArtikelCEId, c.VervangenDoorArtikelCEId
FROM ArtikelCE_CTE acteC
INNER JOIN Article c
ON c.VervangenDoorArtikelCEId = acteC.ArtikelCeId
where c.VervangenDoorArtikelCEId is not null
)
SELECT ArtikelCeId, VervangenDoorArtikelCEId FROM ArtikelCE_CTE
【问题讨论】:
标签: sql sql-server-2012 common-table-expression