Paginación de SQL Server 2012 con orden por y recuperación de compensación

Muchas veces los desarrolladores necesitan implementar la paginación en los resultados de búsqueda. La paginación es el proceso de dividir los resultados de una consulta en páginas numeradas discretas.

SQL Server 2012 ha introducido un método nuevo y fácil para implementar la paginación usando OFFSET y FETCH SIGUIENTE. Este proceso es en realidad más rápido en comparación con los métodos complejos anteriores como el uso de row_number. Esta característica es algo similar a la cláusula de límite / compensación de MySQL.

COMPENSAR: especifica el número de filas a omitir antes de que comience a devolver filas
FETCH SIGUIENTE: el número de filas para mostrar en el resultado

Exploremos Ordenar por Offset en SQL Server 2012 con ejemplos.

Cree una tabla llamada COMPAÑÍA y rellénela con algunos datos.

SI OBJECT_ID ('COMPAÑÍA') NO ES NULL DROP TABLE LA COMPAÑÍA GO CREATE TABLE LA COMPAÑÍA (ID INT. CLAVE PRINCIPAL, NOMBRE VARCHAR (25), LOCATION VARCHAR (25)) IR ​​INSERTAR LOS VALORES DE LA COMPAÑÍA (1, 'HCL', 'Londres' ), (2, 'HP', 'Bangalore'), (3, 'Microsoft', 'Bangalore'), (4, 'Infosys', 'Pune'), (5, 'Google', 'Londres'), (6, 'GE', 'Londres'), (7, 'AltiSource', 'Nueva York'), (8, 'Facebook', 'Palo alto'), (9, 'IBM', 'Nueva York') , (10, 'TCS', 'Mumbai') GO SELECT * DE LA COMPAÑÍA GO


Problema 1.1 - Usar solo DESPLAZAMIENTO

SELECCIONE ID, NOMBRE, UBICACIÓN DE LA COMPAÑÍA PEDIDO POR IDENTIFICACIÓN COMPENSACIÓN 3 FILAS


En la consulta anterior, estamos usando solo DESPLAZAMIENTO, por lo que omitirá las primeras tres filas y devolverá todas las filas restantes en un orden determinado.



Problema 1.2: omita cero filas y recupere las primeras cinco filas.

SELECCIONE ID, NOMBRE, UBICACIÓN DE LA COMPAÑÍA PEDIDO POR IDENTIFICACIÓN DESPLAZAMIENTO 0 FILAS SOLO SIGA 5 FILAS


En la consulta anterior, OFFSET 0 ROWS significa que hemos omitido cero y FETCH NEXT 5 intenta recuperar las siguientes cinco filas.


Problema 1.3: salte las primeras cinco filas y busque las siguientes cinco filas.

SELECCIONE ID, NOMBRE, UBICACIÓN DE LA COMPAÑÍA PEDIDO POR IDENTIFICACIÓN DESPLAZAMIENTO 5 FILAS FETCH SIGUIENTE 5 FILAS SOLAMENTE


Aquí, estamos saltando las primeras cinco filas y recogiendo las siguientes cinco filas.

El resultado anterior se puede lograr utilizando SQL Server 2005/2008 utilizando row_number y tabla derivada.

SELECCIONE ID, NOMBRE, UBICACIÓN DE (SELECCIONE ID, NOMBRE, UBICACIÓN, ROW_NUMBER () OVER (ORDER BY ID) como rownum DE LA COMPAÑÍA c) DT DONDE DT.rownum ENTRE 6 Y 10


Comparación de rendimiento entre OFFSET FETCH y ROW_NUMBER

El enfoque OFFSET FETCH tomó 0.003294, y el enfoque row_number tomó 0.0033038. Esto muestra el enfoque más nuevo OFFSET FETCH en SQL Server 2012 es más rápido.


Problema 1.4 - Uso de variables con OFFSET y FETCH

DECLARAR @OffSetRows AS INT = 5 DECLARAR @FetchRows AS INT = 5 SELECCIONAR ID, NOMBRE, UBICACIÓN DE LA COMPAÑÍA PEDIDO POR ID OFFSET @OffSetRows ROWS FETCH NEXT @FetchRows ROWS SOLAMENTE


Este es el mismo que el problema 1.3, pero aquí estamos utilizando variables para almacenar valores de DESPLAZAMIENTO y FETCH.