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

SQL Server 2008 - Consulta condicional


melhor fonte para condições de pesquisa dinâmica:

Condições de pesquisa dinâmica em T-SQL por Erland Sommarskog

há muitas implicações sutis sobre como você faz isso para saber se um índice pode ser usado ou não. Se você estiver na versão correta do SQL Server 2008, basta adicionar OPTION (RECOMPILE) para a consulta e o valor da variável local em tempo de execução é usado para as otimizações.

Considere isso, OPTION (RECOMPILE) vai pegar este código (onde nenhum índice pode ser usado com esta bagunça de OR s):
WHERE
    (@search1 IS NULL or [email protected])
    AND (@search2 IS NULL or [email protected])
    AND (@search3 IS NULL or [email protected])

e otimizá-lo em tempo de execução (desde que apenas @Search2 tenha sido passado com um valor):
WHERE
    [email protected]

e um índice pode ser usado (se você tiver um definido na Coluna2)