循环存储过程的问题……帮忙分析一下,谢谢!
这样一个问题:假设订几个房间,要到期了,准备续签。
列出一堆桌子,用复选框进行选择。把桌子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) "
不过还是要根据你实际来