我试图通过递归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!
非常感谢任何帮助!
答案 0 :(得分:0)
您正在使用Common Table Expressoins。
您遗失的一件事是使用DataAreaId和PartitionId(如果使用AX 2012 R2)。
看看已定义的索引。
答案 1 :(得分:0)
好吧,显然我找到了它,只是使用了一个存储过程并将BOMId参数传递给了Anchor CTE的where语句。