通过递归CTE爆炸BOM

时间:2013-11-18 17:56:19

标签: sql-server common-table-expression recursive-query ax

我试图通过递归CTE爆炸BOM,但我仍然只获得锚行。但是,我正在尝试使用此SQL代码:

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 个答案:

答案 0 :(得分:0)

您正在使用Common Table Expressoins

您遗失的一件事是使用DataAreaId和PartitionId(如果使用AX 2012 R2)。
看看已定义的索引。

答案 1 :(得分:0)

好吧,显然我找到了它,只是使用了一个存储过程并将BOMId参数传递给了Anchor CTE的where语句。