как передать Order By @col name через переменную в включенном поисковом запросе - PullRequest
1 голос
/ 31 декабря 2011

Ниже приведен пейджинговый запрос для SQL-сервера, он работает нормально без динамического порядка по переменной @ pOrderBy .

Я хочу реализовать две вещи в этом запросе.

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

    ALTER PROCEDURE [dbo].[usp_get_all_groups] 
      -- Add the parameters for the stored procedure here
      @pStartIndex smallint,
      @pPageSize tinyint,
      @pOrderBy varchar(20)
    AS
    BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;
    
     SELECT       GroupTable._id,
                  GroupTable.GroupCode,
                  GroupTable.Type,
                  GroupTable.Description
        From(
        Select ROW_NUMBER() OVER (
           ORDER BY UG._id,
                UG.GroupCode,
                UG.Type,
                UG.Description ) as [Row_Number],
                UG._id,
                UG.GroupCode,
                UG.Type,
                UG.Description
       From UserGroups as UG
       ) as GroupTable
       where GroupTable.[Row_Number] BETWEEN @pStartIndex AND @pStartIndex + @pPageSize             
       ORDER BY GroupTable.[Row_Number]
    
    END
    

Ответы [ 2 ]

5 голосов
/ 31 декабря 2011

Я хочу отсортировать строки по имени передаваемого им столбца.

Для этого вам нужно будет использовать динамический SQL - невозможноиспользуйте имя столбца в переменной в обычном запросе.

Альтернативой является использование CASE в предложении ORDER BY - проверка значения переменной и использование соответствующего столбца.См. Комментарий к @ Dems.

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

Используйте выходной параметр или возвращаемое значение и присвойте ему значение такого запроса в этой хранимой процедуре.

3 голосов
/ 31 декабря 2011
  1. Вы не можете упорядочить по значению переменной
  2. Существуют различные методы для подкачки и упорядочения по пользовательскому столбцу, есть два наиболее полезных (IMHO):
    • использовать динамические запросы
    • используйте CLR Определяемый пользователем агрегат , который принимает значение поля сортировки, направление сортировки, номер страницы, размер страницы и идентификатор записи и, наконец, возвращает набор идентификаторов, который объединяет необходимыестраница с примененной сортировкой - также она может вернуть общее количество строк в одном запросе.
...