Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uporządkuj Używając parametru dla nazwy kolumny

Powinieneś być w stanie zrobić coś takiego:

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;
  • Przypisz 1 do @OrderByColumn sortować według Forename .
  • Przypisz 2, aby sortować według Surname .
  • Itd... możesz rozszerzyć ten schemat do dowolnej liczby kolumn.

Uważaj jednak na wydajność. Tego rodzaju konstrukcje mogą zakłócać zdolność optymalizatora zapytań do znajdowania optymalnego planu wykonania. Na przykład, nawet jeśli Forename jest objęty indeksem, zapytanie może nadal wymagać pełnego sortowania, a nie tylko przechodzenia przez indeks w kolejności.

Jeśli tak jest i nie możesz pogodzić się z konsekwencjami wydajności, może być konieczne posiadanie oddzielnej wersji zapytania dla każdego możliwego porządku sortowania, co znacznie komplikuje sprawy po stronie klienta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wdrażanie stronicowania za pomocą OFFSET FETCH NEXT w SQL Server

  2. Używana wersja SQL Server nie obsługuje danych typu datetime2?

  3. Jak zaktualizować dużą tabelę z milionami wierszy w SQL Server?

  4. Jak wyświetlić pełną zawartość kolumny tekstowej lub varchar(MAX) w programie SQL Server 2008 Management Studio?

  5. Baza danych, która może obsłużyć>500 milionów wierszy