以下代码产生: 语句终止。在语句完成之前,最大递归 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