1. ホーム
  2. .net

[解決済み] LINQの.Skip(1000).Take(100)をピュアSQLで書くにはどうしたらいいですか?

2023-01-22 03:51:27

質問

のSQLに相当するものは何ですか? .Skip() メソッドに相当するSQLは何ですか?

例えば、以下のような場合です。私は、特定のデータベーステーブルから1000~1100行を選択したいと思います。

これは SQL だけで可能でしょうか。それとも、テーブル全体を選択してから、メモリ内で行を見つける必要があるのでしょうか? テーブルがかなり大きくなる可能性があるので、可能であれば、これを避けたいと理想的に思っています。

どのように解決するのですか?

SQL Server 2005 以降では ROW_NUMBER 関数を使用します。

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 51 AND 60; --BETWEEN is inclusive