2012-06-15 82 views
0

存儲過程返回1000000條記錄。我如何通過傳遞參數來修改它並返回1-100,101-200,201-300(即引入分頁)。T-SQL查詢語句批量返回記錄

+0

有輕微的修改,你可以使用我張貼到[這個問題](HTTP答案:// stackoverflow.com/questions/10984768/sql-query-for-asp-net-grid-pagination/10993318#10993318),最後添加一個隨機排序。 – Bridge

+0

不要關注。你想返回1-100,那麼當你返回101-200時,你不關心這個訂單是否和第100個訂單一樣?所以它可能包含已經在前100箇中返回的行?如果你想返回大塊行(「分頁」),你需要* ORDER BY'來保持一致。 –

+0

我的理解,如果沒有明確的「秩序」,那麼1000000的順序不保證執行之間。不可預知的順序對我來說很適合分頁,只要從頭到尾進行分頁時,我會得到相同的1000000行。更新的問題。 – MicMit

回答

0

請嘗試和測試以下

簡單地傳遞的PageIndex和PAGESIZE 當

PageIndex = 1 and PageSize=100 => 1-100 
PageIndex = 2 and PageSize=100 => 101-200 and so on 


CREATE PROCEDURE [dbo].[MyProc] 
(
@PageSize int, 
@PageIndex int 
) 
AS 
/* SET NOCOUNT ON */ 
declare 
    @error int, 
    @StartRow int, 
    @EndRow int 

if(@PageIndex < 1) 
    Set @PageIndex = 1 

Set @StartRow = (@PageSize * (@PageIndex - 1)) + 1 
Set @EndRow = @PageSize * @PageIndex 

    SELECT * FROM( 
     SELECT 
      col1, 
      col2, 
      col3 
     FROM 
    SomeTable s 
) s 
WHERE ((s.RowNumber Between @StartRow AND @EndRow))