How do I write LINQ's .Skip(1000).Take(100) in pure SQL?

.net, sql, sql-server

Solution

SQL Server 2012 and above have added this syntax:

SELECT *
FROM Sales.SalesOrderHeader 
ORDER BY OrderDate
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY

Problem

What is the SQL equivalent of the `.Skip()` method in LINQ? For example: I would like to select rows 1000-1100 from a specific database table. Is this possible with just SQL? Or do I need to select the entire table, then find the rows in memory? I'd ideally like to avoid this, if possible, since the table can be quite large.

Original source

Related problems