有一个这样的产品结构:
支架1 由 材料1 + 材料2 组成
支架2 由 材料1 + 材料3 组成
支架3 由 支架1+材料4 组成
这样的一个产品结构,类似BOM,
建表SQL如下:CREATE TABLE [dbo].[boms] (
    piID varchar(20),  --父ID
    picID varchar(20)  --子ID
)
GOinsert into boms(piID,picID) values('001','0011')
insert into boms(piID,picID) values('001','0012')
insert into boms(piID,picID) values('0012','0013')
insert into boms(piID,picID) values('0012','0014')
insert into boms(piID,picID) values('0013','00133')
insert into boms(piID,picID) values('0013','00134')
insert into boms(piID,picID) values('00133','001331')
insert into boms(piID,picID) values('00133','001332')
go--通过以下函数可以实现查询下级的编码:
create function f_getP(@piID varchar(20)) 
returns @re table(picID varchar(20),lev int,piID varchar(20),TFlag varchar(10)) 
as
begin
    declare @l int 
    set @l=0 
    insert @re select picID,@l,piID,'本级ID' from [boms] where piID = @piID
    while @@rowcount>0 
    begin 
        set @l=@l+1
        insert @re select a.picID,@l,a.piID,'下级ID'
        from [boms] a,@re b
        where a.piID=b.picID and b.lev=@l-1 and a.picID is not null
    end 
    update @re set lev=@l-lev
    return
end
godeclare @piID varchar(10)
set @piID = '001'select * from dbo.f_getP(@piID)==
现在的问题是,表中增加了一个数量字段,
支架1 由 2个材料1 + 3个材料2 组成
支架2 由 3个材料1 + 5个材料3 组成
支架3 由 4个支架1+1个材料4 组成假如现在需要5个支架3,则计算需要:
5×4个支架1 
5×1个材料4
--
5×4×2个材料1
5×4×3个材料2想要这样的结果,函数该如何修改一下呢?谢谢