Пейджинг в T-SQL - PullRequest
       66

Пейджинг в T-SQL

0 голосов
/ 02 июля 2011
ALTER PROCEDURE [dbo].[getMessages]
    -- Add the parameters for the stored procedure here
    @lastRow int,
    @sort varchar(9)
AS
BEGIN
    -- Insert statements for procedure here
    DECLARE @StartRow INT,@EndRow INT
    SELECT @StartRow = (@lastRow + 1), @EndRow = (@lastRow + 6)

;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY
        CASE WHEN @sort = 'votes1' THEN m.votes END DESC,
        CASE WHEN @sort = 'votes2' THEN m.votes END ASC
      ) AS rows,
      m.message,
      m.messageId,
      TotalCount = COUNT(m.messageId) OVER ( PARTITION BY NULL)
    FROM
      tblMessages m
    WHERE
      m.deleted != 1
      )
     SELECT * 
     FROM cte WHERE ROWS BETWEEN @StartRow AND @EndRow
    ORDER BY rows
END

Так что это мой процесс, который я использую для подкачки страниц, поэтому на переднем конце я могу перейти в последний ряд, который я видел, а затем, когда я нажимаю «загрузить больше», он начинается со следующего ряда и получает следующие 6. Ну, не хочу, чтобы ПРЕДЫДУЩАЯ 6 передавала идентификатор, поэтому, если вы видите 6, перейдите к следующим шести, а затем снова захотите увидеть предыдущие 6.

Как бы я изменил этот процесс для этого?

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Вы не.

Вместо этого измените свой код. Ключ в процедуре - @lastrow. Когда вы выполняете это в первый раз, я предполагаю, что @lastrow = 0. Если они идут вперед, вы выполняете это со значением 6.

Чтобы вернуться назад, просто передайте текущее значение - 6. Например, если вы находитесь на странице 20, @lastrow будет 114. Вычтите 6 в вашем коде и снова вызовите процедуру .

1 голос
/ 02 июля 2011

Вы проходите в «последнем ряду», но не проходите ничего, что говорит вам о направлении.Вместо того, чтобы переходить в последний ряд, почему бы не указать желаемый номер страницы?Страница 1 = строки 1-6, страница 2 = строки 7-12 и т. Д. Теперь процедуре не нужно запоминать состояние, так как она заботится только о том, какой набор строк вы хотите использовать в следующий раз.Если вы ищете хранимую процедуру подкачки, вы найдете много примеров, которые делают именно то, что вы хотите.

...