Tengo esta consulta con MySQL:
select * from table1 LIMIT 10,20
¿Cómo puedo hacer esto con SQL Server?
sql
sql-server
migration
Grandes bolas
fuente
fuente
Respuestas:
Iniciando SQL SERVER 2005, puede hacer esto ...
o algo así para 2000 y versiones inferiores ...
fuente
Clunky, pero funcionará.
La omisión de MSSQL de una cláusula LIMIT es criminal, IMO. No debería tener que hacer este tipo de solución poco clara.
fuente
A partir de SQL SERVER 2012, puede usar la cláusula OFFSET FETCH:
http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx
Esto puede no funcionar correctamente cuando el pedido no es único.
Si la consulta se modifica a ORDER BY OrderDate, el conjunto de resultados devuelto no es el esperado.
fuente
Esto es casi un duplicado de una pregunta que hice en octubre: emular la cláusula LIMIT de MySQL en Microsoft SQL Server 2000
Si está utilizando Microsoft SQL Server 2000, no hay una buena solución. La mayoría de las personas tienen que recurrir a capturar el resultado de la consulta en una tabla temporal con una
IDENTITY
clave primaria. Luego, consulte la columna de la clave principal utilizando unaBETWEEN
condición.Si está utilizando Microsoft SQL Server 2005 o posterior, tiene una
ROW_NUMBER()
función, por lo que puede obtener el mismo resultado pero evitar la tabla temporal.También puede escribir esto como una expresión de tabla común como se muestra en la respuesta de @Leon Tayson .
fuente
Así es como limito los resultados en MS SQL Server 2012:
NOTA:
OFFSET
solo se puede usar con o en conjunto conORDER BY
.Para explicar la línea de código
OFFSET xx ROWS FETCH NEXT yy ROW ONLY
El
xx
es el número de registro / fila del que desea comenzar a extraer en la tabla, es decir: si hay 40 registros en la tabla 1, el código anterior comenzará a extraer de la fila 10.El
yy
es el número de registros / filas que desea extraer de la tabla.Para construir sobre el ejemplo anterior: Si la tabla 1 tiene 40 registros y comenzó a extraer de la fila 10 y tomar el siguiente conjunto de 10 (
yy
). Eso significaría que el código anterior extraerá los registros de la tabla 1, comenzando en la fila 10 y terminando en 20. Por lo tanto, extrayendo las filas 10-20.Consulte el enlace para obtener más información sobre OFFSET
fuente
fuente
La consulta de MySQL LIMIT sintácticamente es algo como esto:
Esto se puede traducir a Microsoft SQL Server como
Ahora su consulta
select * from table1 LIMIT 10,20
será así:fuente
Esta es una de las razones por las que trato de evitar usar MS Server ... pero de todos modos. A veces simplemente no tienes una opción (¡sí! ¡Y tengo que usar una versión desactualizada!).
Mi sugerencia es crear una tabla virtual:
De:
A:
Entonces solo consulta:
Si se agregan o eliminan campos, la "fila" se actualiza automáticamente.
El principal problema con esta opción es que ORDER BY es fijo. Entonces, si desea un orden diferente, deberá crear otra vista.
ACTUALIZAR
Hay otro problema con este enfoque: si intenta filtrar sus datos, no funcionará como se esperaba. Por ejemplo, si haces:
WHERE se limita a aquellos datos que están en las filas entre 10 y 20 (en lugar de buscar en todo el conjunto de datos y limitar la salida).
fuente
Este es un enfoque de múltiples pasos que funcionará en SQL2000.
fuente
fuente
Deberías intentar. En la consulta a continuación, puede ver agrupar por, ordenar por, Omitir filas y limitar filas.
fuente
Es lo mismo que
Aquí hay un artículo sobre la implementación de Limit en MsSQL Es una buena lectura, especialmente los comentarios.
fuente
En SQL no existe una palabra clave LIMIT. Si solo necesita un número limitado de filas, debe usar una palabra clave TOP que sea similar a un LIMIT.
fuente
Si su ID es un tipo de identificador único o su ID en la tabla no está ordenada, debe hacer lo siguiente a continuación.
El código será
fuente
- Dando una columna [Count] y asignando a cada fila un recuento único sin ordenar algo, luego vuelva a seleccionar dónde puede proporcionar sus límites .. :)
fuente
Una de las formas posibles de obtener resultados como se muestra a continuación, espero que esto ayude.
fuente
Manera fácil
MYSQL:
MSSQL:
ORDER BY es obligatorio
fuente
Si recuerdo correctamente (ha pasado un tiempo desde que utilicé SQL Server), puede usar algo como esto: (2005 y versiones posteriores)
fuente
WHERE
un alias definido en la mismaSELECT
cláusula de nivel .