2012-09-11 13 views
5

Tengo una consulta en SQL Server 2012 que debe volver una serie de registros basados ​​en el tamaño de página especifico y la página que se encuentra. Se ve así:Offset Fetch Siguiente para obtener todas las filas

 

SELECT LocID, LocName 
FROM Locations 
ORDER BY LocName OFFSET @PageNum ROWS 
FETCH NEXT @PageSize ROWS ONLY 
 

El código es bastante simple. Lo que tengo que hacer, sin embargo, es ponerlo en una función para devolver el paginado correctamente. Sin embargo, también podría estar necesitando todos los registros de vuelta de esta función, por lo que es necesario tener la opción de llamar a la función sin compensar o FETCH (en su mayoría, se trata de un informe que no tiene paginación y sólo debe ser los datos recta) . No puedo pensar en una buena manera de hacer esto.

+0

¿Por qué no llamarlo con un '@ PageSize' lo suficientemente grande como para devolver todos los registros? –

+1

El problema es que no sé cuán grande será el conjunto de registros hasta después de que lo haya ejecutado. También tuve otra pregunta sobre algo similar a ese problema. – CrystalBlue

+2

límite superior de INT o BIGINT debe ser suficiente, dependiendo ... –

Respuesta

7

Se podría decir:

@PageNum INT, 
@PageSize INT 

... 

SELECT @PageSize = COALESCE(@PageSize, 2000000000); 
-- 2 billion should be enough? 

... OFFSET (COALESCE(@PageNum, 1)-1)*@PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY; 

Cuando solo desea que todas las filas, pasar NULL para ambos parámetros.

+0

Esto es lo que me han sugerido otras personas por ahora, así que esta parece ser la respuesta más válida. ¡Gracias! – CrystalBlue

Cuestiones relacionadas