sql >> Database teknologi >  >> RDS >> Sqlserver

Bestil ved at bruge en parameter for kolonnenavnet

Du burde være i stand til at gøre noget som dette:

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;
  • Tildel 1 til @OrderByColumn for at sortere på Forename .
  • Tildel 2 for at sortere på Surname .
  • Osv... du kan udvide dette skema til et vilkårligt antal kolonner.

Vær dog forsigtig med ydeevnen. Disse former for konstruktioner kan forstyrre forespørgselsoptimeringsfunktionens evne til at finde en optimal eksekveringsplan. For eksempel selvom Forename er dækket af indeks, kan forespørgslen stadig kræve den fulde sortering i stedet for blot at krydse indekset i rækkefølge.

Hvis det er tilfældet, og du ikke kan leve med præstationsimplikationerne, kan det være nødvendigt at have en separat version af forespørgslen for hver mulig sorteringsrækkefølge, hvilket komplicerer tingene betydeligt på klientsiden.



  1. Udforskning af Postgres-datoformater og deres forskellige funktioner

  2. Brent Ozar forklarer SQL Server intern og ekstern fragmentering

  3. Postgres sql indsæt forespørgselssyntaksfejl fra phpPgAdmin

  4. CROSS JOIN vs INNER JOIN i SQL