Можно ли заказать по любому столбцу с заданным параметром хранимой процедуры в SQL Server? - PullRequest
4 голосов
/ 04 октября 2008

Я просматривал таблицы сортировки по столбцу, указанному для некоторого ввода, и из того, что я нашел, нет простого способа сделать это. Лучшее, что я нашел, это оператор switch:

SELECT Column1, Column2, Column3, Column4
FROM Table
ORDER BY CASE WHEN @OrderBY = 'Column1' THEN Column1
              WHEN @OrderBY = 'Column2' THEN Column2
              WHEN @OrderBY = 'Column3' THEN Column3
              WHEN @OrderBY = 'Column4' THEN Column4

Возможно ли сделать это без CASE такого заявления? Если таблица станет больше и нужно будет сортировать больше столбцов, это может стать грязным.

Единственный способ, которым я смог это сделать, - это просто объединить большую строку SQL, что отчасти сводит на нет преимущества хранимых процедур и затрудняет написание и обслуживание SQL.

Ответы [ 5 ]

4 голосов
/ 04 октября 2008

У вас есть два варианта:

  1. Как вы реализовали выше

  2. Или сгенерируйте динамический sql и выполните используя sp_executesql

1 голос
/ 25 июня 2010

Вы уже пишете правильный синтаксис:

SELECT Column1, Column2, Column3 
FROM SOME_TABLE
ORDER BY 1,2,3

попробуйте

1 голос
/ 04 октября 2008

Функция RANK в SQL Server и Oracle может повысить производительность и сделать код немного чище:

SQL:

DECLARE @column varchar(10)

SET @column = 'D'

SELECT *
FROM Collection.Account AS A
ORDER BY 
      CASE 
            WHEN @column = 'A' THEN (RANK() OVER(ORDER BY A.Code ASC))
            WHEN @column = 'D' THEN (RANK() OVER(ORDER BY A.Code DESC))
      END
1 голос
/ 04 октября 2008

Обычно я преобразую хранимую процедуру в функцию, которая возвращает таблицу (чтобы вы могли выбрать ОТ нее ... и добавить к ней динамический порядок по столбцам в коде приложения:

Select
    *
From
   myTableFUnction()
Order by
   1, 2, 3, 6  <-- defined by application code in the SQL for the query

Рон

0 голосов
/ 04 октября 2008

В этом случае, если у вас слишком большой набор данных и вам не нужно использовать возможности сервера базы данных (тонкий клиент, слабый клиентский компьютер и т. Д.), Лучше всего выполнить сортировку внутри клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...