[T-SQL] OFFSET / FETCH

Comment ignorer les N premières lignes dans SQL Server et récupérer le reste des lignes?

 

Dans la requête suivante, nous pouvons ignorer les 10 premières lignes en utilisant le mot-clé OFFSET et en ne spécifiant pas le mot-clé FETCH.

 

1.DECLARE @NRowSkip INT = 10;
2. 
3.SELECT * FROM [TableName]
4.ORDER BY [ID]
5.OFFSET @NRowSkip ROWS;

 

 

Récupération de N lignes après avoir commandé une requête avec OFFSET

 

1.DECLARE @NRowSkip INT = 10, @NRowCrop INT = 10 
2. 
3.SELECT * FROM [MyTable]
4.ORDER BY [ID]
5.OFFSET @NRowSkip ROWS FETCH NEXT @NRowCrop ROWS ONLY;

 

Comment faire de la pagination dans SQL Server >= 2012 ?

 

1.DECLARE @RowsPerPage INT = 10, @PageNumber INT = 5;
2.SELECT *
3.FROM [MyTable]
4.ORDER BY [ID]
5.OFFSET @PageNumber*@RowsPerPage ROWS
6.FETCH NEXT @RowsPerPage ROWS ONLY

 

 

Cependant attention OFFSET et FETCH sont de bonne solution, mais seulement pour un petit nombre d'enregistrements. Lorsque vous travaillez avec beaucoup d'enregistrements, la performance diminue lorsque le @NRowSkip est supérieur à 1000.