簡體   English   中英

獲取 SQL 導致零件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM