存储过程部分代码如下,各变量的定义略。set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid=@CLASSID and @vRESULT' exec sp_executesql @sql,N'@ID int out,@CLASSID int,@vRESULT varchar(2000)',@ID out,@CLASSID,@vRESULT@vRESULT是从另外一个存储过程返回的值,为一个标准的SQL条件,然后拼接在@sql中,但是存储过程执行后报错,报错信息为:“服务器: 消息 170,级别 15,状态 1,行 1
                          第 1 行: '@vRESULT' 附近有语法错误。”
请问究竟如何解决,谢谢

解决方案 »

  1.   

    @ID int out,
    改成
    @ID int output,
      

  2.   

    不是这个问题的。错是错在“classid=@CLASSID and @vRESULT' “中,错在SQL中
      

  3.   

    set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid=@CLASSID and convert(varchar(2000),@vRESULT)' 
           exec sp_executesql @sql,N'@ID int out,@CLASSID int,@vRESULT varchar(2000)',@ID output,@CLASSID,@vRESULT写成这样也报语法错误,@vRESULT这个值里面是带有引号的条件,如A IN ('B','C')
      

  4.   

    楼主convert(varchar(2000),@vRESULT)这个是表达式吗?应该这样
    set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid=@CLASSID and '+ convert(varchar(2000),@vRESULT)
      

  5.   

    变量怎么能放在字符串里!set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid=@CLASSID and '+ convert(varchar(2000),@vRESULT)
    或者
    set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid=@CLASSID and 'SET @sql=@sql+convert(varchar(2000),@vRESULT)这样看的更清楚点
      

  6.   

    还有个错
    @classid也是变量,不能放在字符串里
    set @sql=N'select @ID=id from article where (audit=0 or audit=1) and classid= '+ cast(@CLASSID as nvarchar(100))+' and '+convert(varchar(2000),@vRESULT)