SQL遍历 游标问题*
我开始写了两个存储过程,一个是根据订单号(OrderID)得到路程(Tpm)只有一条。
另外一个是根据用户UID得到订单号 但是为多行,返回的OrderID可能是个集合。
问题来了,我想根据一个UID 得到所有的路程。
也就是在存储过程2中得到的可能有的多个订单号,然后遍历这些订单号,放到第一个存储过程
中拿到路程然后累加。
这个SQL语句应该如何写? 存储过程中可以调用存储过程吗?
如果大家觉得可以吧两个存储过程写一起的话更好。
SQL语句遍历只能用游标吗?查看了资料,游标貌似看不太懂。呵呵。
请大侠帮忙。。。
附(两个存储过程名称写错了,名称不是一样的,见谅)
------解决方案--------------------这个不建议用循环,直接在存储过程2里面使用存储过程1里面的方式得到所有路程就好了
在2里面你已经得到所有的订单号了,那么你一个订单可以得到路程,使用的条件是订单号=,那么多个订单号
就可以使用订单号in()这样的条件。
------解决方案--------------------
CREATE PROCEDURE [dbo].[proc_GetFltAriLineByOrderId2]
@UID varchar(10) AS
begin
declare @OrderID bigint
declare @tpmList(OrderID bigint,Tpm varchar(100))
declare cur cursor for
select distinct OrderID from [FltOrderDB].dbo.[FltPassenger] fp join [UserDB].dbo.[Member_Corp] corp
on fp.CorpUID=corp.UID
open cur
fetch next from cur into @OrderID
while @@fetch_status=0
begin
insert into @tpmList(Tpm) exec [你得到Tpm的SP,参数是@OrderID,注意返回的结果只能是一行Tpm]
update @tpmList set OrderID=@OrderID where OrderID is null
fetch next from cur into @OrderID
end
close cur
deallocate cur
select * from
[FltOrderDB].[dbo].[FltPassenger] fltpass
inner join [FltOrderDB].[dbo].[FltOrder] fltorder on fltpass.OrderID=fltorder.ID
inner JOin [UserDB].[dbo].[Member_Corp] corp on fltpass.CorpUID=corp.UID