检索SQL Server表中的特定行范围

Geo*_*ge2 7 .net c# ado.net sql-server-2008

我有一个像(OrderID [uniqueidentifier],OrderDesciption [nvarchar])的表结构,我正在使用ADO.Net + C#+ VSTS 2008 + SQL Server 2008.表很大,我想让客户给我两个输入,开始范围索引和结束范围索引,我将返回该范围内的特定行(在开始范围索引和结束范围索引之间).

例如,如果客户端输入50,100,我想要返回第50行直到第100行.

乔治,提前谢谢

Mar*_*ell 15

您可以ROW_NUMBER在TSQL(2005年起)中使用它来执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ-to-SQL等:

var qry = ctx.Table.Skip(50).Take(50); // or similar
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 4

基本上,在 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
Run Code Online (Sandbox Code Playgroud)

但这需要一个有用且合适的ORDER BY子句,并且通过 GUID 排序确实不是一个好主意。DATETIME 或不断增加的 ID 是最好的。

马克