例:@是否查询A bit,
@是否查询B bit
SELECT ID FROM tableName where ClassID=5我的意思是比如 @是否查询A=1 的话,那么where 后面就加入ClassID=5
查询条件,如果为0就不加入这个条件,@是否查询B也是一样根据传进的参数来返回不同的查询结果这块在存储过程中如何处理才能达到想要的效果。

解决方案 »

  1.   


    if @是否查询A = 1
       SELECT ID FROM tableName where ClassID=5
    else
       SELECT ID FROM tableName if @是否查询A = 1 and @是否查询B = ...  --满足条件的写在这里
       SELECT ID FROM tableName where ClassID=5
    else
       SELECT ID FROM tableName 
      

  2.   

    SELECT ID FROM tableName where (@是否查询A=0 or ClassID=5) and (@是否查询B=0 or ?)
      

  3.   

    select id
    from tablename
    where (@a=1 and classid=5) or 1=1
      

  4.   


    declare @sql varchar(1000);
    set @sql='select id from tablename where 1=1 ';
    set @sql=@sql+(case when @A=1 then 'and classid=5' else '' end);
    exec(@sql);
      

  5.   

    SELECT ID 
    FROM tableName 
    where ((@是否查询A=1 and ClassID=5) or @是否查询A=@是否查询A) 
    and ((@是否查询B=1 and ClassID=5) or @是否查询B=@是否查询B)
      

  6.   

    如果用if判断是可以,但是如果select语句复杂的时候要写好多的块,最好是能在where后直接判断,有点像在程序里的拼接一样,在存储过程里有点晕(@a=1 and classid=5) or 1=1 这种情况真不 太清楚能行不where ((@a=1 and classid=5) or 1=1) and classid=5
    上边这句是我写的,上边这句如果 @a=0的情况我可以理解成 以上条件就是where classid=5
      

  7.   

    楼上几位把各种方案都说了,
    1,采用if方式
    2,采用动态拼接
    3,采用where后面加条件。楼主按需取用,这些方式都是可行的。