[英]Getting SQL results in parts
我知道我可以使用TOP
關鍵字來限制接收到的結果的計數,但是有沒有辦法使用類似<give me the next 1000 results>
這樣的東西來接收下一個讓說 1000 個結果,每次下一個緩存的 1000 個結果給我?
所以假設我的查詢有 100000 並且第一次運行我得到 1-1000 我想收到 1000-2000 等等。
當數據在查詢之間發生變化時,rownum/between 解決方案將為您提供下一個數據塊的近似值。
如果您需要從固定結果中獲取特定數據塊,請將所有結果插入表中,然后根據需要使用數據。 結果將保持不變,直到您再次刷新表中的數據。
當您必須獲得准確的下一組(向前或向后)時,這很有效。 這可能很有用,具體取決於您的情況。
你可以使用ROW_NUMBER()
SELECT
col1,
col2
FROM
(
SELECT
col1,
col2,
ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
FROM
MyTable
) AS MyDerivedTable
WHERE
MyDerivedTable.RowNum BETWEEN @startRow AND @endRow
使用ROW_NUMBER function 在子查詢或CTE中根據需要對數據進行排序。 然后來自該子查詢/CTE 的 select 具有所需的值(例如, WHERE RowNum > 1000 AND RowNum <= 2000
)。
假設有下表
create table #temp
(
ID int Identity(1,1) ,
name varchar(1000)
)
假設表中有以下記錄
select * from #temp
我們從聲明以下變量開始
Declare @PageIndex INT
//表示起始索引,表示你的頁碼
Declare @PageSize INT
//要在一個頁面中顯示的記錄總數
Set @PageIndex = 1
Set @PageSize = 10
我正在設置頁面大小 = 10,因為我的表中只有 15 條記錄。 但是您可以將此數字替換為 1000 甚至大於此數字。
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ID)
AS Row, * FROM #temp
)T WHERE Row between
(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
如果您執行以下查詢,它將在屏幕截圖中為您提供以下記錄。
使用以下查詢移至第二頁時。
Declare @PageIndex INT
Declare @PageSize INT
set @PageIndex = 2
set @PageSize = 10
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ID)
AS Row, * FROM #temp
)T WHERE Row between
(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
結果將在屏幕截圖下方。
所以同樣你可以檢查 1000 條記錄。
希望這會幫助你。
如果有任何混淆,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.