Мне нужно создать список со всеми подстатьями (со всех уровней) данной статьи. Чтобы получить только дочернюю статью родительской статьи, я использую функцию GetArticleGroup (ArticleId, Index).
Выполнение функции вернет что-то вроде этого:
TRANS_ID ARTICLE_GROUP_ID ARTICLE_TRANS_ID PIECES SEQUENCE_NO DESCRIPTION IS_CHANGED ART_INDEX
1 55 56 1 1 0 A
2 55 57 1 2 0 A
Это то, что я пытался безуспешно:
WITH Subarticles AS (
SELECT ARTICLE_TRANS_ID, ART_INDEX, cast(ARTICLE_TRANS_ID as varchar(max)) levels FROM dbo.GetArticleGroup(55, 'A') AG
UNION ALL
SELECT S.ARTICLE_TRANS_ID, S.ART_INDEX, S.levels+','+cast(S.ARTICLE_TRANS_ID as varchar(max)) levels FROM Subarticles S
CROSS APPLY
GetArticleGroup(S.ARTICLE_TRANS_ID, S.ART_INDEX) g where CHARINDEX(CAST(g.ARTICLE_TRANS_ID AS varchar(max)), s.levels)=0
)
SELECT top 30 ARTICLE_TRANS_ID, ART_INDEX, levels FROM Subarticles OPTION (maxrecursion 1000)
Ожидание:
56, A
57, A
58, A
То, что я получаю вместо этого, бесконечно l oop:
56, A
57, A
57, A
...
57, A
Спасибо,