¿Cuál es la solución de paginación más eficiente que usa SQL Server 2005 contra una tabla con alrededor de 5,000-10,000 filas? He visto varios por ahí pero nada que los compare.¿La mejor solución de paginación usando SQL Server 2005?
Respuesta
Para una tabla de ese tamaño, utilice una Expresión de tabla común (CTE) y ROW_NUMBER; use una función pequeña para calcular los registros para traer de vuelta según las variables @PageNumber
y @PageSize
(o lo que sea que quiera llamar). Un simple ejemplo de uno de nuestros procedimientos almacenados:
-- calculate the record numbers that we need
DECLARE @FirstRow INT, @LastRow INT
SELECT @FirstRow = ((@PageNumber - 1) * @PageSize) + 1,
@LastRow = ((@PageNumber - 1) * @PageSize) + @PageSize
;
WITH CTE AS
(
SELECT [Fields]
, ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber
FROM [Tables]
WHERE [Conditions, etc]
)
SELECT *
-- get the total records so the web layer can work out
-- how many pages there are
, (SELECT COUNT(*) FROM CTE) AS TotalRecords
FROM CTE
WHERE RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC
¿Tienes que esperar a que el proceso se ejecute una vez para poder obtener el número total de páginas? – Caveatrob
PD: ¡esto está funcionando bien hasta ahora! – Caveatrob
Sí, la forma en que lo hacemos es usar los resultados del proceso para llenar un pequeño objeto PagingInfo que maneja el proceso de escribir los enlaces del número de página. Suponiendo que no está haciendo una cantidad loca de uniones o llamadas de función en la consulta, este bebé debería ejecutarse casi al instante, por lo que nunca ha sido un problema para nosotros. Me alegro de que funcione para ti :) –
Una de las mejores discusiones de diversas técnicas de localización que he leído está aquí: SQL Server 2005 Paging – The Holy Grail. Tendrá que completar una inscripción gratuita en SQLServerCentral.com para ver el artículo, pero vale la pena.
Incluso esto debería ayudar ..
SELECT * FROM
(
SELECT Row_Number() OVER(order by USER_ID) As RowID,
COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS,
select name from usertbl
)
As RowResults WHERE
RowID Between 0 AND 25
No estoy seguro si es mejor que @keith versión.
- 1. paginación NHibernate con SQL Server
- 2. SQL Server 2005 replicación
- 3. TransactionInDoubtException usando System.Transactions en SQL Server 2005
- 4. Isoweek en SQL Server 2005
- 5. SQL Server 2008 a SQL Server 2005
- 6. SQL Server 2008 compatibilidad con SQL Server 2005
- 7. degradación de SQL Server 2008 a SQL Server 2005
- 8. SQL Server 2005 pérdida de precisión numérica
- 9. Insertar valores múltiples usando INSERT INTO (SQL Server 2005)
- 10. Restaurar SQL Server 2008 DB * a * SQL Server 2005
- 11. ¿Cuánta RAM está usando realmente SQL Server?
- 12. Mejor método para importar archivos csv o excel a SQL Server 2005 usando .net MVC view
- 13. ¿Dinámicamente nombrar índices en SQL Server 2005?
- 14. SQL Server 2005 - Orden de combinaciones internas
- 15. Solución de problemas de SQL Server Timeout
- 16. Intercalación de clientes y SQL Server 2005
- 17. SQL Server 2005: interbloqueo de transacción
- 18. Números persas en SQL Server 2005
- 19. Extraer horas de DateTime (SQL Server 2005)
- 20. SQL Server 2005 ROW_NUMBER() sin ORDER BY
- 21. SQL Server 2005 Error 701 - sin memoria
- 22. UPSERT atómico en SQL Server 2005
- 23. Consulta paginada utilizando la ordenación en columnas diferentes usando ROW_NUMBER() OVER() en SQL Server 2005
- 24. ¿Cuál es la mejor manera de almacenar datos históricos en SQL Server 2005/2008?
- 25. Acceda a TimeZoneInfo desde SQL 2005 Server
- 26. subconsultas en UPDATE SET (sql server 2005)
- 27. instrucción IIF en SQL Server 2005
- 28. MySQL vs SQL Server 2005/2008 rendimiento
- 29. Consultas jerárquicas en SQL Server 2005
- 30. Indexar varchar en MS SQL Server 2005
posible duplicado de [ASP.NET, SQL 2005 "paginación"] (http://stackoverflow.com/questions/1058825/asp-net-sql-2005-paging) – M4N
numerosas: http://stackoverflow.com/questions/tagged/pagination + sql-server –