вторник, 1 июля 2014 г.

Динамическая сортировка данных в MS SQL Server

Часто бывает нужно предоставить выборку данных в MS SQL Server в отсортированном виде, при этом сортировка должна быть настраиваемая на клиенте (направление сортировки и поле сортировки). Пример такого сценария: таблица на клиенте, в которой выводятся данные о каких-либо объектах. 
В большинстве случаев, такую задачу решают при помощи Dynamic SQL.
Альтернативным вариантом является построение выражения в инструкции ORDER BY на основе входных данных.
Собственно пример реализации такого варианта решения:
declare @order nvarchar(max)
set @order = 'Field1'
-- ...
declare @direction nvarchar(4)
set @direction = 'asc'
-- ...
select * 
from MyTable1
order by 
  case
    when @direction = 'asc' then 
      case
        when @order = 'Field1' then Field1
        when @order = 'Field2' then Field2
        when @order = 'Field3' then Field3
      end 
    else null
  end asc,
  case
    when @direction = 'desc' then 
      case
        when @order = 'Field1' then Field1
        when @order = 'Field2' then Field2
        when @order = 'Field3' then Field3
      end 
    else null
  end desc