sql 2000 递归查询

有一对应表,就两个字段:订单号(int),工单号(int),多对多,无序。现在通过一自定义函数,查得与输入订单号有关的全部订单号的最小值。1、对应表中查不到输入订单号,未... 有一对应表,就两个字段:订单号(int),工单号(int),多对多,无序。

现在通过一自定义函数,查得与输入订单号有关的全部订单号的最小值。

1、对应表中查不到输入订单号,未开工单,R
有一对应表,就两个字段:订单号(int),工单号(int),多对多,无序。
现在通过一自定义函数,查得与输入订单号有关的全部订单号的最小值。
1、对应表中查不到输入订单号,未开工单,RETURN输入订单号;
2、对应表中只有一行订单号=输入订单号,即只有一个工单号与输入订单对应:
分支一:该工单号也只有一个,即订单工单一一对应,RETURN输入订单号;
分支二:该工单号不只一个,即输入订单与其它订单合用工单:
再分支一:其它订单没有对应更多工单,RETURN min(输入订单+其它订单)
再分支二:其它订单又引入了更多工单, 进入递归。。。,最终取得关系网中最小订单号;
3、订单表中有多行订单号=输入订单号,即有多个工单与输入订单对应:
分支一:工单列表没有引入新的订单,RETURN输入订单号;
分支二:工单列表引入了其它订单, 进入递归。。。,最终取得关系网中最小订单号;
研究了两天,终于憋出来一段sql,检查发现错误“无法从函数中访问临时表”。
痛定思过,函数可能使用递归,访问临时表有效率风险。
看看哪位朋友能帮忙解决一下(要考虑SQL2000能运行和执行效率)。
我就18点财富,全拿出来了。
下面是我写的运行不了的SQL(部分,字数限制),献丑了。

set @PO=@InSoID
select dProcSheetID in #pp from v_SOrderProcSheet where dSoID=@InSoID --对应全部工单
select dSoID into #dd from v_SOrderProcSheet where (dProcSheetID in (select dProcSheetID from #pp) --反对应全部订单
while exists (select * from v_SOrderProcSheet where
(dSoID in (select dSoID from #dd)) and (dProcSheetID not in (select dProcSheetID from #pp))
begin --有未收录工单
insert #pp select dProcSheetID from v_SOrderProcSheet where dSoID in (select dSoID from #dd)
insert #dd select dSoID from v_SOrderProcSheet where dProcSheetID in (select dProcSheetID from #pp)
end
if exists (select * from #dd) then select @PO=min(dSoID) from #dd

return @PO
end
展开
 我来答
苍狼_白鹿
2015-08-30
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
with tt(select 语句1 --初始化
union all
select 语句2)
select * from tt
在select 语句2中from的表里关联with后面的表名tt就形成递推了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式