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
所以这是我用于分页的proc,所以在前端我可以传入我看到的最后一行,然后当我点击“加载更多”时,它从下一行开始并获得下一个6。好吧,不是我想要PREVIOUS 6,传入一个id,所以如果你看到6,那么去下一个6,然后再想要看到之前的6个。
我如何修改此proc来做到这一点?
答案 0 :(得分:2)
你没有。
相反,修改您的代码。 proc中的关键是@lastrow。当你第一次执行它时,我假设@lastrow = 0.如果它们继续执行,你将以值6执行它。
要向后移动,只需传递当前值 - 6.例如,如果您在第20页,则@lastrow将为114.在代码中减去6 并调用proc试。
答案 1 :(得分:1)
你正在传递“最后一行”,但你并没有传递任何告诉你方向的东西。而不是传递到最后一行,为什么不传入你想要的页码?第1页=第1-6行,第2页=第7-12行等等。现在,该过程不必记住状态,因为它只关心下一个您想要的行集。如果您搜索分页存储过程,您会发现许多示例完全符合您的要求。