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

循环存储过程的问题……帮忙分析一下,谢谢!
这样一个问题:假设订几个房间,要到期了,准备续签。
列出一堆桌子,用复选框进行选择。把桌子ID传给一个存储过程,进行处理。
存储过程名:ProTest   ,处理桌子,比较复杂。但只用一个桌子ID就够了。
问题:这个逻辑如何写比较好

假设1:得到的ID=“1,2,3,4”有4个桌子要处理。
              是否要进行4次调用存储过程
              idArr=split(ID, ", ")
              for   i   =   1   to   ubound(idArr)  
                      conn.execute( "Exce   ProTest   "&id& "   ")
              next

              要是这样写的话,有几个ID就会调用几次存储过程。
如果一次性把所有ID传到存储过程中,可不可以?
在存储过程中,处理类似split的东西,在进行循环?
各位遇到这种情况,怎么弄比较好啊!谢谢了!


------解决方案--------------------
终于明白我学到现在是皮毛,,看了楼主的..........晕呼,,
学习 帮顶!!!!!
------解决方案--------------------
过程中加个参数,也就是ID过程,
循环在过程中处理
------解决方案--------------------
学习
------解决方案--------------------
在存储过程中的WHERE条件不要用where id=@id,改成where id in(@id)
------解决方案--------------------
在存储过程中的WHERE条件不要用where id=@id,改成where id in(@id)
这个是可以的
while (1=1)
begin

if ...
break
end

------解决方案--------------------
declare @longref_no varchar(1000)
set @longref_no=Oid(这是你传过来的值)
create table #ref (ref_no char(50))
begin
declare @rf_i int
set @longref_no=rtrim(ltrim(@longref_no))
set @rf_i=charindex( ', ',@longref_no)
while @rf_i> =1
begin
insert #ref values(left(@longref_no,@rf_i-1))
set @longref_no=substring(@longref_no,@rf_i+1,len(@longref_no)-@rf_i)
set @rf_i=charindex( ', ',@longref_no)
end
if @longref_no <> '\ '
insert #ref values(@longref_no)
end

select * from table where in (select ref_no from #ref)
------解决方案--------------------
把你的存储过程(ProTest)贴出来看看,才好帮你

主要思想还是把 "where id=@id "改成 "where id in (@idlist) "

不过还是要根据你实际来