0

次のコードが生成されます。ステートメントが終了しました。ステートメントが完了する前に、最大再帰回数 100 を使い果たしました。

すべての親と子のリストを作成しようとしています。ArtikelCEId = 7 は例としてハードコーディングされています。

UNION ALL (親または子の検索) を 1 つだけ指定して 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
4

2 に答える 2