sql >> Database >  >> RDS >> Sqlserver

Volgorde Door een parameter voor de kolomnaam te gebruiken

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 op Forename .
  • 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.



  1. Vraag extreem traag in code maar snel in SSMS

  2. CONVERT_TZ() Voorbeelden – MySQL

  3. Hoe parallelle plannen opstarten - deel 2

  4. Beste manier om te controleren op lege of null-waarde