Je zou zoiets als dit moeten kunnen doen:
SELECT *
FROM
TableName
WHERE
(Forename LIKE '%' + @SearchValue + '%') OR
(Surname LIKE '%' + @SearchValue + '%') OR
(@SearchValue = 'ALL')
ORDER BY
CASE @OrderByColumn
WHEN 1 THEN Forename
WHEN 2 THEN Surname
END;
- Wijs 1 toe aan
@OrderByColumn
om te sorteren opForename
. - Wijs 2 toe om te sorteren op
Surname
. - Enz... je kunt dit schema uitbreiden naar een willekeurig aantal kolommen.
Wees echter voorzichtig met de prestaties. Dit soort constructies kan interfereren met het vermogen van query-optimizer om een optimaal uitvoeringsplan te vinden. Zelfs als bijvoorbeeld Forename
wordt gedekt door de index, kan de zoekopdracht nog steeds de volledige sortering vereisen in plaats van alleen de index op volgorde te doorlopen.
Als dat het geval is, en u kunt niet leven met de prestatie-implicaties, kan het nodig zijn om een aparte versie van de query te hebben voor elke mogelijke sorteervolgorde, wat de zaken aan de clientzijde aanzienlijk compliceert.