语法
EXISTS subquery参数
subquery是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。 结果类型
Boolean结果值
如果子查询包含行,则返回 TRUE。

解决方案 »

  1.   

    exists并不会执行完整个查询,一旦满足条件,就会退出查询.而第一个方法是一定要执行完完整的查询.
    两者的效率当然不同.
      

  2.   

    select top 1 @iv_old_offlinecardtradeno = offlinecardtradeno,
                @iv_old_firstconsumetime = firstconsumetime,
                @iv_old_lastconsumetime = lastconsumetime
         from tf_f_cardacc       
         where asn =  @iv_rec_asn     游标有10000多条记录会赋值10000次。   
    建议用top 1 试试.
      

  3.   

    我不是很懂你的意思,但是不是所有的基于行集的操作都要用游标的。我看得出来你用游标的目的只是传一个@iv_rec_asn值,如果真是这样,完全可以不用游标。
      

  4.   

    select @iv_old_offlinecardtradeno = offlinecardtradeno,
                @iv_old_firstconsumetime = firstconsumetime,
                @iv_old_lastconsumetime = lastconsumetime
         from tf_f_cardacc       
         where asn =  @iv_rec_asn这个选出的结果也是要么为空,要么只有一条啊
    和   if exists(select * from tf_f_cardacc       
         where asn =  @iv_rec_asn)      
          begin
         
          end
         
         else
           begin
           
           end一样的啊!!
    我搞不懂为什么会差别这么打
      

  5.   

    select @iv_old_offlinecardtradeno = offlinecardtradeno,
                @iv_old_firstconsumetime = firstconsumetime,
                @iv_old_lastconsumetime = lastconsumetime
         from tf_f_cardacc       
         where asn =  @iv_rec_asn这个选出的结果也是要么为空,要么只有一条啊
    和   if exists(select * from tf_f_cardacc       
         where asn =  @iv_rec_asn)      
          begin
         
          end
         
         else
           begin
           
           end一样的啊!!
    我搞不懂为什么会差别这么打
      

  6.   

    差别我觉得还是同意 zjcxc(邹建) 的,就是说差别就在于一个要完成整个查询,而第二个只要找到满足条件的就执行,这两个之间的差别就在这里撒!至于你要实现的目的,我觉得完全没有必要要用到游标,是你的方法不正确,所以~~~~可以结帖了把!!