sql1=select  * from (select  *, row_number() over(order by  username ) as  rowNumber from users where  regfrom='&admin&') as t where t.rowNumber > 0 and t.rowNumber <= 0 + 30 order by  username sql1查询得到一个结果集, 有27条记录。然后sql2=select username,daili from users where  username='" + username+ "' or regfrom like '%" + "&" + username+ "&" + "%' order by usernamesql2的username是结果集1里得到的接着sql3=select username,back_money,back_money2,follows,type from "+ dbleft + "bank_back where username='" + username1+ "' " + ptype + " " + btype + " " + addtime1 + " "+ addtime2 + " order by addtime descsql3的username1和其他参数都是从sql2里得到的从程序里反映出来的就是for(sql1的结果集){   for(sql2的结果集)    {         for(sql3的结果集)           {           处理......            }    }}请问存储过程该怎么实现.记得是用fetch loop 来进行循环遍历,然后可以自定义 type ~~~~(>_<)~~~~    都忘光光了

解决方案 »

  1.   

    不需要存储过程把第一条语句放入一个临时表第二条语句取的时候直接用这个临时表同理 第三个条用第二个当然 2005+可以用 CTE
      

  2.   

    感觉没必要使用循环,想循环的话用Outer apply 在函数里面做一些处理,也相当于使用循环了!
      

  3.   

    是直接当成子查询吗?
    会不会很慢, 因为程序里面是这样的一个结构,然后循环很慢,我就想:存储过程不是有预编译吗,那就放在存储过程里试一试.是这样的, 
    sql1的结果又27条。
    sql2的结果是在27*4800条(4800是sql1的username在sql2中能查到平均这么多)
    sql3的结果是在前面两条基础上在乘以一个数, 
    程序里是按for去遍历,花了太长时间了. 现在想要有个办法优化下。
      

  4.   

    使用游标进行循环,比while好点