[英]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
所選行的范圍是50到100 ,但請注意結果中不包含第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.