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

我有一个像(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)作为行FROM Orders)一个WHERE行> 5和行<= 10