2013-11-18 3 views
2

Я пытаюсь взорвать спецификацию через рекурсивный CTE, но я все еще получаю только строки привязки. Тем не менее, я пытаюсь использовать этот SQL-код:Exploding BOM через рекурсивный CTE

With BOMTree_CTE 

AS 

(

--Anchor 

Select 

B.BOMID 

,B.ITEMID 

,B.LINENUM 

,B.position 

,B.BOMQTY 

,B.INVENTDIMID 

,0 as 'CurrentLevel' 

,BV.BOMID as BVBomId 

,BV.ITEMID 

FROM BOM B Left Join BomVersion BV On B.ItemID = BV.ItemId 



Union All 

Select 

BB.BOMID 

,BB.ITEMID 

,BB.LINENUM 

,BB.position 

,BB.BOMQTY 

,BB.INVENTDIMID 

,CurrentLevel+1 

,CAST('1' as nvarchar(20)) 

,CAST('2' as nvarchar(20)) 

From Bom BB Join BOMTree_CTE C On BB.BOMID = C.BVBomId 

) 

select * from BOMTree_CTE C 

Я не хочу делать это через X ++, мне это нужно через SQL!

Любая помощь очень ценится!

+2

+1 только для названия :) –

ответ

0

Вы используете Common Table Expressoins.

Ну, одна вещь, которую вам не хватает, это использование DataAreaId и PartitionId (при использовании AX 2012 R2).
Взгляните на определенные индексы.

+0

Я пытаюсь сделать именно это ... однако я не могу найти полный пример. – jhowe

0

Ну, видимо, я нашел его, просто использовал хранимую процедуру и передал параметр BOMId в инструкцию where Anchor CTE.

Смежные вопросы