如下:
create procedure dd
 (
   @fabu varchar(20),
   @rjbb varchar(20),
   @czxt varchar(20)
  )
as 
declare @sql varchar(8000)
set @sql = 'select title,rjbb,case fabu
  when ''1'' then ''aa''
  when ''2'' then ''bb''
  when ''3'' then ''cc''
  when ''4'' then ''dd''
end as fabu from zsgx where 1= 1 and fabu=' +@fabu if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='+ @rjbbif(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='+ @czxt exec(@sql)
如果执行exec dd @fabu=2,@rjbb='',@czxt='',没有问题,如果执行exec dd @fabu=2,@rjbb='5-2',@czxt='',也没有问题,如果执行exec dd @fabu=2,@rjbb='5-2y5',@czxt='',提示'y5' 附近有语法错误。如果执行exec dd @fabu=2,@rjbb='5-y5',@czxt=''或者exec dd @fabu=2,@rjbb='y5',@czxt='',提示列名 'y5' 无效。
,为什么呢????????小弟快疯掉了!!

解决方案 »

  1.   

    create procedure dd
     (
       @fabu varchar(20),
       @rjbb varchar(20),
       @czxt varchar(20)
      )
    as 
    declare @sql varchar(8000)
    set @sql = 'select title,rjbb,case fabu
      when ''1'' then ''aa''
      when ''2'' then ''bb''
      when ''3'' then ''cc''
      when ''4'' then ''dd''
    end as fabu from zsgx where 1= 1 and fabu=''' +@fabu + ''''if(len(ltrim(rtrim(@rjbb))) >0)
    set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
    set @sql = @sql + ' and czxt ='''+ @czxt + ''''exec(@sql)
      

  2.   

    create procedure dd
     (
       @fabu varchar(20),
       @rjbb varchar(20),
       @czxt varchar(20)
      )
    as 
    declare @sql varchar(8000)
    set @sql = 'select title,rjbb,case fabu
      when ''1'' then ''aa''
      when ''2'' then ''bb''
      when ''3'' then ''cc''
      when ''4'' then ''dd''
    end as fabu from zsgx where 1= 1 and fabu=' +@fabu 
    if(len(ltrim(rtrim(@rjbb))) >0)
    set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
    set @sql = @sql + ' and czxt ='''+ @czxt + ''''exec(@sql)
      

  3.   

    from zsgx where 1= 1 and fabu=' +@fabu if(len(ltrim(rtrim(@rjbb))) >0)
    set @sql = @sql + ' and rjbb ='+ @rjbbif(len(ltrim(rtrim(@czxt))) >0)
    set @sql = @sql + ' and czxt ='+ @czxt --------------------------------------------
    改成:
     from zsgx where 1= 1 and fabu=''' +@fabu + ''''if(len(ltrim(rtrim(@rjbb))) >0)
    set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
    set @sql = @sql + ' and czxt ='''+ @czxt + ''''
      

  4.   

    没有看到fabu是数值型的,所以第一个有问题
      

  5.   

    刚回复了LZ的另一个贴子
    你先不要疯,你自己的 问题比如:select * from tablename where col = sjfklsjdlfjslkfsjdfljsljfsdlfj
    你认为这样的SQL语句能执行吗?
      

  6.   

    如果我在as 后面还有
    、、、、
    as
         exec(' Select ' + @Cond);
         print(' Select ' + @Cond);
    declare @sql varchar(8000)
    set @sql = 'select title,rjbb,
    、、、
    其中的
         exec(' Select ' + @Cond);
         print(' Select ' + @Cond);该如何专置呢?
      

  7.   

    我的意思是如何把     exec(' Select ' + @Cond);
         print(' Select ' + @Cond);也放在@sql中??