Depuis quelques temps, dans le cadre du développement des bibliothèques Lelibre.Fwk, j'étais à la recherche de la solution pour supporter la pagination sous SQL Server ... Après, quelques tests et autres demandes, j'ai trouvé la solution ^_^. Je vous la donne. J'ai par après eu l'idée de valider ou améliorer celle-ci en regardant ce qu'executait LINQ lorsque je demandais une "requête" ....
[csharp]
var q = (from c in dataContext.Blog select c).Skip(5).Take(10);
Et voici le code SQL généré:
SELECT [t1].[BlogID], [t1].[Title]
FROM (
    SELECT ROW_NUMBER() OVER 
   (ORDER BY [t0].[BlogID], [t0].[Title]) AS [ROW_NUMBER], [t0].[BlogID], [t0].[Title]
    FROM [Blogs] AS [t0]
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
En SQL simple, on aurait également pu effectuer un query du type:
SELECT TOP 10 * FROM (SELECT ROW_NUMBER() OVER (ORDER BY BlogID, Title) AS RowNumber, *
FROM Blogs
WHERE RowNumber > 5
Cependant, je reste d'avis qu'il aurait été plus sympathique de pouvoir utiliser LIMIT / OFFSET ;-).