Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ignorando a instrução WHERE se a variável para essa instrução for nula


Para este caso simples em sua pergunta, basta usar
IF ( @place IS NULL )
  SELECT *
  FROM   table1
ELSE
  SELECT *
  FROM   table1
  WHERE  country = @place  

Se a sua situação real for mais complexa, você pode usar
select * 
from Table1 
where @place is null or [email protected] 
option (recompile)

A razão para precisar do recompile A dica é evitar ter um único plano atendendo a ambos os casos e fazer uma varredura desnecessária no caso de você fornecer um valor explícito.

Essas e outras alternativas, como gerar a consulta dinamicamente, são discutidas em detalhes no artigo Pesquisa dinâmica Condições em T-SQL