现有sql server2000查询分析器下的代码如下,我如何能将sum(bb)的值付给变量@s,神啊救救我吧。declare @a float,@x varchar(100),@s float
    
set @x='select "@s"=sum(bb) from aaaaa'exec (@x)     select @s

解决方案 »

  1.   

    这样不好吗?或者可以换用别的方法实现,你上面的方法是错误的!
    declare @a float,@x varchar(100),@s float
        
    select @s=sum(bb) from aaaaaselect @s
      

  2.   

    这样吧:(可能不是最好的);
    declare @a float,@x varchar(100),@s float
        
    select "@s"=sum(bb) from aaaaaset @x=@sexec (@x)     select @s
      

  3.   

    我的@x是动态组合生成的sql语句,比如说
    declare @fd varchar(10)
    set @fd='bb'
    set @x='select "@s"=sum('+@fd+') from aaaaa'
    //--
    @fd有可能是从别的地方传过来的一个字段名称,那么我如何实现上面的功能呢?
      

  4.   

    似乎不太可能实现你的要求,因为exec的作用域是临时的,即使你的动态列名可以传进去执行,但是你的sum值不可能传出来,因为在exec函数里不会识别你定义的变量的。
    有一个办法繁了点但可实现类似的功能,考虑到你的列肯定有限的几个就用
    case语句吧根据不同的列值执行不同的 sum语句,执行可以放到相同的变量里。
      

  5.   

    把 exec 放在最后一句话,可以实现的,下面的 select @s 是不需要的。
      

  6.   

    declare @a float,@x varchar(100),@s float
    select  @s=sum(i) from t
    select  @s
    //@a,@x都没用呀!!
      

  7.   

    请教 findcsdn(findcsdn) :
    ‘有一个办法繁了点但可实现类似的功能’不知道这个是个什么办法,能否抽点时间教导一番,愿听其详
      

  8.   

    我理解你的意思是根据不同的列求出sum值:
    如果是这样的话,因为列不会太多而且肯定有限个:
    所以这样:   declare @col varchar(20)
    declare @sum intset @col='col1'select @sum=
    case
      when @col='col1' then sum(col1)
          when @col='col2' then sum(col2)      
    end
     from  talename /*output*/
    select @sum