主从表的BOM如何用递归实现? ( 积分: 100 )

  • 主题发起人 主题发起人 Evan5188
  • 开始时间 开始时间
if exists(select * from bom04 where @bom0101=@child)
這句好象有問題。
應該是
if exists(select * from bom04 where bom0101=@child)
 
谢谢,我改过了,好像成了死循环,下面是我停止执行时出现错误提示,
所影响的行数为 13 行)

服务器: 消息 16915,级别 16,状态 1,过程 bomlist02,行 8
名为 'my_cursor' 的游标已存在。
服务器: 消息 16905,级别 16,状态 1,过程 bomlist02,行 9
游标已打开。
 
SQL的存儲過程不支持遞歸的,你還是要用函數才行。用上面我的遞歸函數改成你想要的結果就行。
 
算了,幫你改過來吧。

CREATE FUNCTION getbom (@bom0101 varchar(20))
RETURNS @tbom table(bom0401 varchar(20),bom0403 decimal(16,3))
AS
begin
declare @bom0401 varchar(20),@bom0403 decimal(16,3)
declare my_cursor cursor for
select bom0401,bom0403 from bom04 where bom0101=@bom0101
open my_cursor
fetch next from my_cursor into @bom0401,@bom0403
while @@fetch_status=0
begin
insert into @tbom select @bom0401,@bom0403
if exists(select *from bom04 where bom0101=@bom0401)
insert into @tbom select *from dbo.getbom(@bom0401)
fetch next from my_cursor into @bom0401,@bom0403
end

return
end
 
TO:leadyli,
其实不考虑层数,你的代码是OK的,只是不明白,我的思路和你的一样,为什么我用过程就不行。
 
来自:leadyli, 时间:2005-7-2 11:36:14, ID:3121724 | 编辑
SQL的存儲過程不支持遞歸的,你還是要用函數才行。用上面我的遞歸函數改成你想要的結果就行。
 
存储过程肯定是可以递归的,我再试试!
 
mssql7 及 mssql2000 只可递归32层
 
算了,这么久了,既然没人答,把分散了吧,很失望![:(]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
634
import
I
后退
顶部