17,377
社区成员
发帖
与我相关
我的任务
分享
DECLARE @t INT
SET @t=1
-->创建临时表#t_BOM存储第一阶的子项物料代码
CREATE TABLE #t_BOM(BMB03 varchar(400),层 INT)
INSERT INTO #t_BOM
SELECT aa.BMB03,@t
FROM bmb_file aa
WHERE aa.BMB01='14N1003'
ORDER BY aa.BMB03
-->创建临时表#t_BOMChild存储“其下阶有BOM”的子项物料代码
CREATE TABLE #t_BOMChild(BMB03 varchar(400),层 INT)
INSERT INTO #t_BOMChild
SELECT aa.BMB03,aa.层
FROM #t_BOM aa
WHERE EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01)
-->循环向临时表#t_BOM和#t_BOMChild插入数据
WHILE @@ROWCOUNT>0
BEGIN
SET @t=@t+1
INSERT INTO #t_BOM
SELECT bb.BMB03,@t
FROM #t_BOMChild aa
INNER JOIN bmb_file bb ON aa.BMB03=bb.BMB01
WHERE aa.层=@t-1
INSERT INTO #t_BOMChild
SELECT aa.BMB03,aa.层
FROM #t_BOM aa
WHERE aa.层=@t AND EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01)
END
-->若要去掉下阶有物料的子物料代码则需要下面Delete语句
DELETE FROM #t_BOM
WHERE EXISTS(SELECT * FROM #t_BOMChild bb WHERE #t_BOM.BMB03=bb.BMB03)
SELECT *
FROM #t_BOM aa