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)
基本上,在 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 是最好的。
马克