日期:2014-05-18  浏览次数:20408 次

SQL存储过程,需要根据传入的参数,更改where语句的条件,请教大虾
假设分别传入参数为1,2,3时
Create   Procedure     X
@type   char(1),

as
    if(@type== '1 ')         Select   id1,id2,id3     from     Table_A     WHERE   id4   like   '% 'A ' '% '  
if(@type== '2 ')         Select   id1,id2,id3     from     Table_A     WHERE   id4   like   '% 'B ' '% '
if(@type== '3 ')         Select   id1,id2,id3     from     Table_A     WHERE   id4   like   '% 'C ' '% '
本来这样也行,可是我的select非常长,中间夹杂inner   join   ,cross   join等语句,因此想把条件选择放到         like后面,可是这样写却报错,请大侠指点下
Select   id1,id2,id3     from     Table_A     WHERE   id4   like     (if(@type== '1 ')     return     '% 'A ' '% '      
                                                                                                                                                        else   if(@type== '2 ')       return   '% 'B ' '% '
                                                                                                                                                      else   if(@type== '3 ')       return   '% 'C ' '% ')



------解决方案--------------------
Create Procedure X
@type char(1)
as
declare @sql nvarchar(4000)
set @sql = 'Select id1,id2,id3 from Table_A WHERE id4 like % '
if(@type= '1 ')
set @sql = @sql + 'A ' + '% '
if(@type= '2 ')
set @sql = @sql + 'B ' + '% '
if(@type= '3 ')
set @sql = @sql + 'C ' + '% '
set @sql = @sql + ' ' --这里加上一些语句,例如你要加的like
execute sp_executesql @sql