online microsoft español documentacion docs books sql sql-server

microsoft - t sql grouping



¿Existe un equivalente ''START AT'' en MS-SQL? (4)

¿Qué versión de SQL Server?

En SQL Server 2000 esto es un verdadero dolor (aunque es posible usar trucos feos como el publicado por stingyjack).

En 2005 y después es un poco más fácil: mira la función Row_Number () .

Y, dependiendo de la aplicación de su cliente, puede que ni siquiera sea tan difícil. Algunos de los controles de red ASP.Net tienen soporte para paginación automática.

Algunas bases de datos admiten comandos como:

SELECT TOP 10 START AT 10 * FROM <TABLE>

Esencialmente necesito sacar los primeros 10 registros, luego los 10 siguientes, luego los 10 siguientes, etc. Tal vez haya otra manera de hacerlo, pero en el pasado lo hice como el anterior para las bases de datos que soportan ''START AT''.


Si quiere ser compatible con SQL Server 2000, puede usar

SELECT * FROM ( SELECT TOP 10 FROM ( SELECT TOP (n * 10) FROM <table> ORDER BY (column) ASC ) AS t1 ORDER BY (column) DESC ) AS t2 ORDER BY (column) ASC

En SQL Server 2005 hay una nueva función Row_Number (). Puedes usarlo de esta manera:

WITH Orders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (order by OrderDate) AS ''RowNumber'' FROM SalesOrder ) SELECT * FROM Orders WHERE RowNumber between 10 and 19;


SELECT Top 10 * FROM Table WHERE <primary key> Not IN ( SELECT Top 10 <primaryKey> FROM Table ORDER BY <primary Key> ASC) ORDER BY <primary Key> ASC


Para SQL Server 2012

SELECT * FROM <TABLE> ORDER BY <SomeCol> OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;