[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.