En PostgreSQL existen las palabras clave Limity Offsetque permitirán una paginación muy fácil de los conjuntos de resultados.
¿Cuál es la sintaxis equivalente para SQL Server?
sql
sql-server
pagination
limit
offset
Earlz
fuente
fuente

Respuestas:
El equivalente de
LIMITesSET ROWCOUNT, pero si desea paginación genérica, es mejor escribir una consulta como esta:La ventaja aquí es la parametrización del desplazamiento y el límite en caso de que decida cambiar sus opciones de paginación (o permitir que el usuario lo haga).
Nota: el
@Offsetparámetro debe usar una indexación basada en uno para esto en lugar de la indexación normal basada en cero.fuente
WHERE RowNum >= (@Offset + 1)The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified. MSSQL2008 R2.Tabletiene 200k registros, primero buscará todos y luego aplicará el límite. ¿Es eficiente esta consulta?Esta característica ahora se simplifica en SQL Server 2012. Esto funciona desde SQL Server 2012 en adelante.
Límite con desplazamiento para seleccionar 11 a 20 filas en SQL Server:
OFFSET: número de filas omitidasNEXT: número requerido de filas siguientesReferencia: https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017
fuente
SQL_CALC_FOUND_ROWScuando se usa esto?Una nota: esta solución solo funcionará en SQL Server 2005 o superior, ya que esto fue cuando
ROW_NUMBER()se implementó.fuente
AS xxPuede usar ROW_NUMBER en una expresión de tabla común para lograr esto.
fuente
Para mí, el uso de OFFSET y FETCH juntos fue lento, por lo que utilicé una combinación de TOP y OFFSET como esta (que fue más rápido):
Nota: Si usa TOP y OFFSET juntos en la misma consulta como:
Luego obtiene un error, por lo que para usar TOP y OFFSET juntos debe separarlo con una subconsulta.
Y si necesita usar SELECT DISTINCT, la consulta es como:
Nota: El uso de SELECT ROW_NUMBER con DISTINCT no funcionó para mí.
fuente
SELECT TOP 20 id FROM table1 where id > 10 order by date OFFSET 20 rows, debe transformarlo comoSELECT TOP 20 * FROM (SELECT id FROM table1 where id > 10 order by date OFFSET 20 ROWS) t1. Editaré mi respuesta. Gracias y disculpa mi inglés.Otra muestra:
fuente
Hay aquí alguien que le dice acerca de esta característica en SQL 2011, es triste que elijan un poco de la palabra llave "OFFSET / FETCH" pero no es standart que bien.
fuente
Agregando una ligera variación en la solución de Aaronaught, típicamente parametrizo el número de página (@PageNum) y el tamaño de la página (@PageSize). De esta manera, cada evento de clic de página solo envía el número de página solicitado junto con un tamaño de página configurable:
fuente
Lo más cerca que puedo hacer es
Que supongo que es similar a
select * from [db].[dbo].[table] LIMIT 0, 10fuente
fuente
fuente
fuente
Como nadie proporcionó este código todavía:
Puntos importantes:
@limitse puede reemplazar con varios resultados para recuperar,@offsetes el número de resultados para omitirwhereyorder bycláusulas, y proporcionará resultados incorrectos si no están sincronizadosorder byestá ahí explícitamente si eso es lo que se necesita?fuente
Específicamente para SQL-SERVER, puede lograrlo de muchas maneras diferentes. Para un ejemplo real, tomamos la tabla Cliente aquí.
Ejemplo 1: con "SET ROWCOUNT"
Para devolver todas las filas, establezca ROWCOUNT en 0
Ejemplo 2: con "ROW_NUMBER y OVER"
Ejemplo 3: con "OFFSET y FETCH", pero con este "ORDER BY" es obligatorio
Espero que esto te ayude.
fuente
En el servidor SQL, usaría TOP junto con ROW_NUMBER ()
fuente
Desde entonces, pruebo más veces este script más útil en 1 millón de registros cada página. 100 registros con paginación funcionan más rápido. Mi PC ejecuta este script 0 segundos mientras lo comparo con mysql tiene su propio límite y compensa aproximadamente 4.5 segundos para obtener el resultado.
Alguien puede perder de entender Row_Number () siempre ordenar por campo específico. En caso de que necesitemos definir solo una fila en secuencia, debemos usar:
ROW_NUMBER () OVER (ORDER BY (SELECT NULL))
Explique:
fuente