declare @a numeric(18,2),@qs char(10),@zz char(10) 
set @qs='1990-1-1'
set @zz='2009-1-1'
exec('select @a=sum(jiefang) from pingzhenku1 where kemudm=''5101'' and pzdate>='''+@qs+''' and pzdate<='''+@zz+'''')服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@a'。

解决方案 »

  1.   

    declare @a numeric(18,2),@qs char(10),@zz char(10) 
    set @qs='1990-1-1'
    set @zz='2009-1-1'
    exec('select '+@a+'=sum(jiefang) from pingzhenku1 where kemudm=''5101'' and pzdate>='''+@qs+''' and pzdate<='''+@zz+'''')
      

  2.   

    -Or
    declare @num numeric(18,2),@sqls nvarchar(4000),@qs char(10),@zz char(10) 
    set @qs='1990-1-1'
    set @zz='2009-1-1'
    set @sqls='select @a=sum(jiefang) from pingzhenku1 where kemudm=''5101'' and pzdate>='''+@qs+''' and pzdate<='''+@zz+'''' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num
      

  3.   

    为什么上面的三种我运行都会有错呢?
    1.必须声明标量变量 "@a"。
    2.'=' 附近有语法错误。
    3.对象名  'pingzhenku1' 无效。
      

  4.   

    --不是吧,试一下,另外你要有pingzhenku1这个表啊
    declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=sum(jiefang) from pingzhenku1 where kemudm=''5101'' and pzdate>='''+@qs+''' and pzdate<='''+@zz+''''  
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num
      

  5.   


    declare @qs char(10),@zz char(10) 
    set @qs='1990-1-1'
    set @zz='2009-1-1'
    exec('declare @a numeric(18,2) select @a=sum(jiefang) from pingzhenku1 where kemudm=''5101'' and pzdate>='''+@qs+''' and pzdate<='''+@zz+''''+' select @a')按照你的要求,@a的宣言要在exec中进行