2011-07-02 67 views
0
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.那么,不是我想要先前的6,传入一个id,所以如果你看到6,转到下一个6,然后想再次看到前6。寻呼在T-SQL

我该如何修改此proc来做到这一点?

+0

为什么选择近距离投票? – slandau

+0

是不是我,但我一直在注意到有人一直在投票关闭与SQL相关的问题。值得庆幸的是它需要5票,但我已经开始对这些行为进行调查(今天第二次)。 –

+1

也许他们更喜欢用xml来做事......;) – NotMe

回答

2

你不知道。

而是修改您的代码。 proc中的关键是@lastrow。当你第一次执行它时,假设@拉斯特罗= 0。如果他们继续前进,则执行它的值为6.

要后退,只需传递当前值 - 6.例如,如果你在第20页,@lastrow将会是114.在你的代码中减去6 并再次调用proc。

+0

这会比以前容易一百万倍。我会给这个镜头。 – slandau

+0

谢谢!有用! – slandau

1

你正在通过“最后一行”,但你没有传递任何告诉你方向的东西。为什么不传入你想要的页码呢?第1页=第1-6行,第2页=第7-12行,等等。现在程序不需要记住状态,因为它只关心下一组你想要的行。如果你搜索分页存储过程,你会发现很多例子完全符合你想要做的事情。