najlepsze źródło dynamicznych warunków wyszukiwania:
Warunki dynamicznego wyszukiwania w T-SQL autorstwa Erlanda Sommarskog
istnieje wiele subtelnych implikacji, jak to zrobić, czy indeks może być używany, czy nie. Jeśli korzystasz z odpowiedniej wersji SQL Server 2008, możesz po prostu dodać OPTION (RECOMPILE)
do zapytania, a wartość zmiennej lokalnej w czasie wykonywania jest używana do optymalizacji.
Rozważ to, OPTION (RECOMPILE)
przyjmie ten kod (gdzie żaden indeks nie może być użyty z tym bałaganem OR
s):
WHERE
(@search1 IS NULL or [email protected])
AND (@search2 IS NULL or [email protected])
AND (@search3 IS NULL or [email protected])
i zoptymalizować go w czasie wykonywania (pod warunkiem, że tylko @Search2 został przekazany z wartością):
WHERE
[email protected]
i można użyć indeksu (jeśli masz zdefiniowany w kolumnie2)