0
存儲過程返回1000000條記錄。我如何通過傳遞參數來修改它並返回1-100,101-200,201-300(即引入分頁)。T-SQL查詢語句批量返回記錄
存儲過程返回1000000條記錄。我如何通過傳遞參數來修改它並返回1-100,101-200,201-300(即引入分頁)。T-SQL查詢語句批量返回記錄
請嘗試和測試以下
簡單地傳遞的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))
有輕微的修改,你可以使用我張貼到[這個問題](HTTP答案:// stackoverflow.com/questions/10984768/sql-query-for-asp-net-grid-pagination/10993318#10993318),最後添加一個隨機排序。 – Bridge
不要關注。你想返回1-100,那麼當你返回101-200時,你不關心這個訂單是否和第100個訂單一樣?所以它可能包含已經在前100箇中返回的行?如果你想返回大塊行(「分頁」),你需要* ORDER BY'來保持一致。 –
我的理解,如果沒有明確的「秩序」,那麼1000000的順序不保證執行之間。不可預知的順序對我來說很適合分頁,只要從頭到尾進行分頁時,我會得到相同的1000000行。更新的問題。 – MicMit