您的位置:程序门 -> web 开发 -> asp



循环存储过程的问题……帮忙分析一下,谢谢!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


循环存储过程的问题……帮忙分析一下,谢谢![已结贴,结贴人:windtalker1782]
发表于:2007-01-05 16:03:09 楼主
这样一个问题:假设订几个房间,要到期了,准备续签。
列出一堆桌子,用复选框进行选择。把桌子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的东西,在进行循环?
各位遇到这种情况,怎么弄比较好啊!谢谢了!
发表于:2007-01-05 16:06:461楼 得分:5
终于明白我学到现在是皮毛,,看了楼主的..........晕呼,,
学习       帮顶!!!!!
发表于:2007-01-05 16:11:162楼 得分:5
过程中加个参数,也就是id过程,
循环在过程中处理
发表于:2007-01-05 16:31:393楼 得分:5
学习
发表于:2007-01-05 16:35:524楼 得分:20
在存储过程中的where条件不要用where   id=@id,改成where   id   in(@id)
发表于:2007-01-05 16:55:165楼 得分:0
这么说就是可以在存储过程中循环了,麻烦告诉具体怎么写这个循环的代码

wisword()   ,ishion(爱森)   谢谢!,感谢帮顶的2位!
发表于:2007-01-05 16:57:256楼 得分:0
我是楼主。
晕,怎么把房间又说成了桌子。

更正,房间就是桌子,桌子就房间,说的一个东西。弄晕了!
发表于:2007-01-05 17:50:017楼 得分:0
帮顶,不喜欢在存储过程里循环
发表于:2007-01-05 22:02:518楼 得分:10
在存储过程中的where条件不要用where   id=@id,改成where   id   in(@id)
这个是可以的
while   (1=1)
begin

if   ...
break
end
发表于:2007-01-05 23:50:369楼 得分:0
老大们,没弄好啊。
谁来给写个具体点。谢啦!
发表于:2007-01-06 09:55:4810楼 得分:0
我的意思是最好不要用循环,比如说,你原来是这样的:
              oid= "1,2,3,4 "
              idarr=split(oid, ", ")
              for   i   =   1   to   ubound(idarr)  
                      conn.EXECute( "select   *   from   [table]   where   id= "&idarr(i))
              next

改成这样:
          oid= "1,2,3,4 "
          conn.EXECute( "select   *   from   [table]   where   id   in(&oid&))
这样就只需要一次查询了
发表于:2007-01-06 09:56:4311楼 得分:0
更正一下:
    conn.EXECute( "select   *   from   [table]   where   id   in( "&oid& ") ")
发表于:2007-01-06 17:30:1112楼 得分:45
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)
发表于:2007-01-06 19:52:2413楼 得分:10
把你的存储过程(protest)贴出来看看,才好帮你

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

不过还是要根据你实际来
发表于:2007-01-08 09:08:4614楼 得分:0
感谢大家了!结贴


快速检索

最新资讯
热门点击