日期:2014-05-17  浏览次数:20633 次

SQL遍历 游标问题*

 我开始写了两个存储过程,一个是根据订单号(OrderID)得到路程(Tpm)只有一条。
 

 另外一个是根据用户UID得到订单号 但是为多行,返回的OrderID可能是个集合。
 
 
 问题来了,我想根据一个UID 得到所有的路程。
 也就是在存储过程2中得到的可能有的多个订单号,然后遍历这些订单号,放到第一个存储过程
 中拿到路程然后累加。
 这个SQL语句应该如何写? 存储过程中可以调用存储过程吗?
 如果大家觉得可以吧两个存储过程写一起的话更好。
 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