Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Подреждане Чрез използване на параметър за името на колоната

Трябва да можете да направите нещо подобно:

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;
  • Присвоете 1 на @OrderByColumn за сортиране по Forename .
  • Задайте 2 за сортиране на Surname .
  • И т.н... можете да разширите тази схема до произволен брой колони.

Все пак внимавайте за производителността. Тези видове конструкции могат да попречат на способността на оптимизатора на заявки да намери оптимален план за изпълнение. Например, дори ако Forename е покрита от индекс, заявката все пак може да изисква пълно сортиране, вместо просто да обикаля индекса в ред.

Ако случаят е такъв и не можете да живеете с последиците за производителността, може да се наложи да имате отделна версия на заявката за всеки възможен ред на сортиране, което значително усложнява нещата от страна на клиента.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избегнем грешката при деление на нула в SQL?

  2. Моля, помогнете за подобряване на статистиката на SQL Server!

  3. Групово вмъкване с квалификатор на текст в SQL Server

  4. Как да изберете последния запис на таблица в SQL?

  5. Как да комбинирате резултатите от две заявки в един набор от данни