Pour le lecteur humain, quelque chose comme cela semble être préféré:
SELECT *
FROM apples
WHERE apple.color = COALESCE(@color, apple.color)
AND apple.time = COALESCE(@time, apple.time);
et je comprends que certains optimiseurs gèrent très bien. Malheureusement, ce n'est pas l'un des de SQL Server les: ce qui précède entraînera une analyse de table, comme des variations de volonté sur le thème :(
Tony Rogerson SQL Server MVP a some good analysis sur cette question et a conclu:
Le seule façon dans SQL Server ... pour obtenir une solution efficace, évolutive et performante est d'utiliser soit une tonne de IF ELSE
contrôle de blocs de flux (un par combinaison paramètre) ou utiliser SQL dynamique .
Donc, la réponse dépend plutôt de savoir si vous écrivez un code facile à comprendre, à maintenir et à transférer vers d'autres plateformes SQL dans le futur ou qui fonctionne bien sur un optimiseur aujourd'hui.
grâce, il a travaillé – sam