2011-07-02 94 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行,等等。現在程序不需要記住狀態,因爲它只關心下一組你想要的行。如果你搜索分頁存儲過程,你會發現很多例子完全符合你想要做的事情。