sql >> Databasteknik >  >> RDS >> Sqlserver

Ordna genom att använda en parameter för kolumnnamnet

Du borde kunna göra något sånt här:

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;
  • Tilldela 1 till @OrderByColumn för att sortera på Forename .
  • Tilldela 2 att sortera på Surname .
  • Etc... du kan utöka detta schema till godtyckligt antal kolumner.

Var dock försiktig med prestanda. Den här typen av konstruktioner kan störa frågeoptimerarens förmåga att hitta en optimal exekveringsplan. Till exempel även om Forename täcks av index, kan frågan fortfarande kräva hela sorteringen istället för att bara gå igenom indexet i ordning.

Om så är fallet, och du inte kan leva med prestandakonsekvenserna, kan det vara nödvändigt att ha en separat version av frågan för varje möjlig sorteringsordning, vilket komplicerar saker och ting avsevärt på klientsidan.



  1. Är java.sql.Timestamp tidszonspecifik?

  2. Hur man får en lista över primärnyckelbegränsningar från alla databaser på SQL Server Instance - SQL Server / TSQL Tutorial Del 60

  3. Vad är aktuell vy APPL_TOP ögonblicksbilder

  4. Reparera korrupt databas postgresql