下面这个存储过程在执行过程中出错,总是提示数据转换错误,可是我根本没有转换,经过一步步排查,问题出在下面:
set @where='where MpaOrder='+@MpaOrder 这句话上,后面直接+参数@MpaOrder难道不行吗?
应该怎么写?CREATE proc PrtMpa
@Tag int
,@MpaOrder varchar(50)
asdeclare @sql varchar(4000)
declare @where varchar(500)
set @sql='select * from v_PrtMpaDetail '
set @where='where MpaOrder='+@MpaOrder   --问题出在这句话上,正确的写法得怎么写?
IF @Tag=0 
BEGIN
SET @sql=@sql+@where+' and PartNo  is  null and isnull(IfService,0)=1'
EXEC(@sql)
END
ELSE IF @Tag=1
BEGIN
SET @sql=@sql+@where+' and not (PartNo  is  null and isnull(IfService,0)=1)'
EXEC(@sql)
END
ELSE IF @Tag=2
BEGIN
SET @sql=@sql+@where
EXEC(@sql)
END;

解决方案 »

  1.   

    set @where='where MpaOrder='''+@MpaOrder+'''
      

  2.   


    set @where='where MpaOrder='''+@MpaOrder+'''
      

  3.   

    set @where='where MpaOrder='''+@MpaOrder+''''
      

  4.   

    set @where='where MpaOrder='''+@MpaOrder+'''' 
      

  5.   

    set @where='where MpaOrder='''+@MpaOrder+''''
    少了个
      

  6.   

    set @where='where MpaOrder='''+@MpaOrder+'''' 
    有必要看下create table #(code varchar(20),value int)
    declare @sql varchar(200)
    set @sql='insert into # select ''AAA'',10' 
    -- AAA之前的一对单引号与之后的一对单引号分别代表一个单引号print @sql  --查看这个字符串的实际内容
    /*
    insert into # select 'AAA',10
    */exec(@sql)
    select * from #
    /*
    code                 value       
    -------------------- ----------- 
    AAA                  10
    */--如果需要insert一个值为'A''AA'的字符串,如下:
    set @sql='insert into # select ''A''''AA'',10'  
    --两层嵌套的字符串内部,一个单引号需要经过两次转义,于是变成了4个单引号print @sql  --查看这个字符串的实际内容
    /*
    insert into # select 'A''AA',10
    */exec(@sql)select * from #
    /*
    code                 value       
    -------------------- ----------- 
    AAA                  10
    A'AA                 10
    */
    drop table #