Skipping WHERE statement if the variable for that statement is null

后端 未结 2 431
甜味超标
甜味超标 2021-01-24 05:56

I will have a table

TABLE1
ID  Name   Country
1   Anna   Singapore
2   Brad   UK
3   Cassie US

declare @place varchar(20);
set @place=\'US\';

select * from Tab         


        
2条回答
  •  独厮守ぢ
    2021-01-24 06:38

    For this simple case in your question just use

    IF ( @place IS NULL )
      SELECT *
      FROM   table1
    ELSE
      SELECT *
      FROM   table1
      WHERE  country = @place  
    

    If your actual situation is more complex you could use

    select * 
    from Table1 
    where @place is null or country=@place 
    option (recompile)
    

    The reason for needing the recompile hint is to avoid having a single plan catering for both cases and doing an unnecessary scan in the event that you do supply an explicit value.

    These, and other alternatives such as generating the query dynamically, are discussed in detail in the article Dynamic Search Conditions in T-SQL

提交回复
热议问题