| |||
| HOLA TODOS... NO EXISTE LIMIT EN SQL SERVER.....(se que no descubri la polvora pero como es la primera vez que uso SQL server, no puedo creer que una cosa tan simple como esa simplemente no exista en SQL server). Entonces mi problema es hacer una consulta SQL con algo que funcione como el LIMIT de MYSQL. se me complica mas que nada por que tengo una consulta con INNER JOIN para juntar tablas y etc... Vi el siguiente ejemplo en otro foro: Código PHP: MI CODIGO ES EL SIGUIENTE: Código PHP: Perdon por colocarla mesclada con el codigo PHP pero es que la necesito de esa manera, es mas que nada para que me entiendan... La idea de usar algo como LIMIT es para hacer un paginador... Saludos y muchas gracias |
| |||
| te lo explico mejor... LIMIT N,N existe en MySQL es para tomar por ejemplo del registro 10 al 20, en SQL server esto NO EXISTE. El TOP N, lo que hace es tomar del registro 0 hasta N que hayas colocado.. No tiene una forma de seleccionar del registro N al registro N.. Entonces, con el codigo que yo expuse quisiera saber como hacer la consulta para poder crear luego un paginador, es decir, como tengo que dejar mi consulta SQL para crear luego un paginador de resultados con SQL server... Saludos |
| ||||
| Re: LIMIT con SQL Server NO EXISTE Ah ya te entiendo. Se produciría el mismo efecto si se tuviera un campo tipo identity y a punta de where podría filtrar los que necesito. Desconozco como hacerlo en sql server, por allí alguién podría opinar por favor
__________________ Yo quiero ser el pelucón del barrio |
| |||
| A manotazo de ahogado intente lo siguiente: Código PHP: ALGO TAN SIMPLE COMO LIMIT EN MYSQL NO EXISTE EN SQL SERVER, entonces me pregunto como hacen un paginador de resultados con SQL server sin esta funcion... Bueno gracias por responder y a ver si un experto puede aportar una solucion gracias.... |
| ||||
| Re: LIMIT con SQL Server NO EXISTE Yo he desarrollado en .net y sql server, en .net al llenar una grilla hago el select de absolutamente todos los datos, pero el control Datagrid de .net lo configuro para la paginación, eso ya es cuestión de programación en el front end, no es que se lanza un select cada vez que el usuario hace clic en alguna flechita para ir a la derecha o izquierda. Ya ves... por usar php
__________________ Yo quiero ser el pelucón del barrio |
| |||
| Bien, con respecto a los diferentes lenguajes de programacion para crear aplicaciones web y etc... siempre hay cosas mejores o peores de acuerdo al lenguaje.. yo se programar en php nada mas... nunca me puse a ver .net.. el tema es mas que nada son los motores de BD, digamos en MySQL es super facil todo, con SQL server tambien es facil muchas cosas de hecho con el SQL server 2005 Express puedo hacer varias cositas que con MySQL no... pero igual, algo que me ha trabajo en este momento es esta pequeña cosa que MySQL lo hace tan simple... como el LIMIT. Entonces, Vuelvo a preguntar de nuevo, EXISTE DE ALGUNA MANERA CON LENGUAJE SQL DE CONSULTAR DE UNA TABLA LAS FILAS DESDE POR EJEMPLO LA FILA 15 A LA FILA 30..... SI ES ASI ¡¡¡¡¡ COMO SE HACE !!!... Gracias igual por responder.... |
| |||
| Hola... no recuerdo de que foro saqué la idea pero resulta filete para poder hacer paginación y esas cosas, filtros etc: si quieren les puedo mandar un resumen del script que genera la siguiente consulta sql, mientras tan solo la query misma: WITH proyectos AS ( SELECT ROW_NUMBER() OVER( ORDER BY sitrelmi_coacen_inc.fei ASC ) as Row, .... columnas_de_diferentes_tablas, .... FROM tablas_de_las_columnas WHERE condiciones AND otras_condiciones ... ORDER BY orden necesario ) SELECT TOP 10 * FROM proyectos WHERE Row > 0 en este caso selecciona los 10 primeros segun el orden que se le da a la query interior, como por ejemplo para filtrar algunas fechas o estados, por poner un ejemplo. ahora, si quieres seleccionar del 6 al 20 digamos seria asi: WITH proyectos AS ( SELECT ROW_NUMBER() OVER( ORDER BY sitrelmi_coacen_inc.fei ASC ) as Row, .... ... ) SELECT TOP 15 * FROM proyectos WHERE Row > 5 ojala te sirva... Eganya. |
| ||||
| Re: LIMIT con SQL Server NO EXISTE Lo podrías filtrar por clave primaria. Cual es la primary key de tu tabla? Lo del lenguaje era solo un comentario suelto, entiendo el centro del asunto que es el select
__________________ Yo quiero ser el pelucón del barrio |
| |||
| Pense en los ID de la tabla, el problema es si llegan a eliminar una fila, el paginador no funcionaria como corresponde... Si tenes alguna idea tirala.. gracias |
| ||||
| Re: LIMIT con SQL Server NO EXISTE La forma básica de tu query es ésta:
Código:
Lo que te interesa es numerar las filas del resultado de la consulta anterior. Que la consulta venga de una sola tabla o de joins no es importante para asignarles a las filas un número de orden. Incluso, aún cuando no tuvieras una columna o columnas en las cuales ordenar los resultados aún así pueden ser numerados los registros.SELECT a.PIN,
a.ACCESS_DATE,
a.TYPE,
a.ACU_NUMBER,
u.USER_CODE,
u.USERS_GROUP_ID,
u.FIRST_NAME,
u.LAST_NAME
FROM access AS a
INNER JOIN users AS u
ON u.USER_CODE = a.PIN
WHERE a.ACCESS_DATE BETWEEN ? AND ?
AND a.PIN = ?
ORDER BY u.LAST_NAME
Código:
En caso de no tener columnas de orden, puedes usar algo como:SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY u.LAST_NAME) AS rn,
a.PIN,
a.ACCESS_DATE,
a.TYPE,
a.ACU_NUMBER,
u.USER_CODE,
u.USERS_GROUP_ID,
u.FIRST_NAME,
u.LAST_NAME
FROM access AS a
INNER JOIN users AS u
ON u.USER_CODE = a.PIN
WHERE a.ACCESS_DATE BETWEEN ? AND ?
AND a.PIN = ?
) AS sub
WHERE rn >= 10 AND rn <= 20
Código:
Sin embargo, lo anterior no es determinístico y es probable que aún para los mismos límites no devuelva lo mismo.ROW_NUMBER() OVER(ORDER BY (SELECT 1)) Como puedes ver es realmente sencillo. Sólo que en este momento estás acostumbrado a la forma de MySQL, que como ya te había comentado, ni siquiera es estándar. Las funciones de ranking como ROW_NUMBER() en cambio sí lo es (SQL2003). |
| ||||
| Re: LIMIT con SQL Server NO EXISTE Analizando la consulta que habías obtenido, el error es que escribiste:
Código:
Pero además, al indicar el orden en la cláusula OVER(), no es necesario el order by al final de la consulta. Puede parecer confuso, pero en casos donde la función usa tambien PARTITION BY, el order by al final de la consulta problemente devuelva los numeros de secuencia desordenados. SELECT select a.PIN as PIN |
Este tema le ha gustado a 1 personas