簡體   English   中英

檢索SQL Server表中的特定行范圍

[英]retrieve specific range of rows in a SQL Server table

我有一個像(OrderID [uniqueidentifier],OrderDesciption [nvarchar])的表結構,我正在使用ADO.Net + C#+ VSTS 2008 + SQL Server 2008.表很大,我想讓客戶給我兩個輸入,開始范圍索引和結束范圍索引,我將返回該范圍內的特定行(在開始范圍索引和結束范圍索引之間)。

例如,如果客戶端輸入50,100,我想返回第50行直到第100行。

喬治,提前謝謝

您可以在TSQL(2005年起)中使用ROW_NUMBER來執行此操作:

SELECT  ID, Foo, Bar
FROM     (SELECT  ROW_NUMBER() OVER (ORDER BY ID ASC) AS Row,
          ID, Foo, Bar
FROM    SomeTable) tmp
WHERE   Row >= 50 AND Row <= 100

或者使用LINQ-to-SQL等:

var qry = ctx.Table.Skip(50).Take(50); // or similar

基本上,您在SQL Server 2005和2008中最好的選擇是CTE - 公用表表達式 - 其中包含ROW_NUMBER()函數 - 如下所示:

WITH MyOrders AS
(
  SELECT
    OrderID,
    OrderDescription,
    ROW_NUMBER() OVER (ORDER BY OrderID) as 'RowNum'
  FROM YourOrders
)
SELECT * FROM MyOrders
WHERE RowNum BETWEEN 50 AND 100

但這需要一個有用且合適的ORDER BY子句,並且通過GUID排序實際上並不是一個好主意。 DATETIME或不斷增加的ID將是最好的。

試試這個,結果將按OrderID列排序。 用你的桌子改變MyTable

SELECT * 
FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY OrderID) AS row FROM MyTable) a 
WHERE row > 50 AND row <= 100

所選行的范圍是50100 ,但請注意結果中不包含第50行。

SELECT * FROM(SELECT *,ROW_NUMBER()OVER(ORDER BY OrderId)as row FROM Orders)WHERE行> 5且行<= 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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