bästa källan för dynamiska sökvillkor:
Dynamiska sökvillkor i T-SQL av Erland Sommarskog
det finns många subtila implikationer om hur du gör detta om ett index kan användas eller inte. Om du använder rätt version av SQL Server 2008 kan du bara lägga till OPTION (RECOMPILE)
till frågan och den lokala variabelns värde vid körning används för optimeringarna.
Tänk på detta, OPTION (RECOMPILE)
kommer att ta den här koden (där inget index kan användas med denna röra av OR
s):
WHERE
(@search1 IS NULL or [email protected])
AND (@search2 IS NULL or [email protected])
AND (@search3 IS NULL or [email protected])
och optimera det vid körning (förutsatt att endast @Search2 skickades in med ett värde):
WHERE
[email protected]
och ett index kan användas (om du har ett definierat på kolumn2)