Archivos para noviembre, 2009

Utilizar paginación en ASP.NET con SQL Server

Posted in Programación with tags , , , , , on 3 noviembre, 2009 by febrer

Un problema que nos encontramos a la hora de realizar consultas con paginación esta en como rellenar un datatable con los registros necesarios de cada página. Es decir, no existe una manera fácil de realizar una consulta del tipo “devuélveme los registros 15 al 30 de la tabla usuarios“.

En MySQL existe un comando para utilizar en la sentencia SELECT que es LIMIT m,n gracias al cual podemos solicitar al servidor ‘n‘ registros comenzado desde el registro ‘m‘.

Para realizar este mismo proceso en SQL Server, podemos utilizar ROW_NUMBER() con un poco de ingenio. Por ejemplo, necesitamos obtener 10 registros desde el 30 al 40, en la siguiente consulta:

SELECT a.NOMBRE, a.TIPO, a.FECNAC,
a.APELLIDO1, a.COD_POSTAL, b.COD_NOMBRE
FROM usuarios AS a
INNER JOIN codpostal AS b ON a.COD_POSTAL = b.COD_POSTAL
WHERE a.FECNAC BETWEEN ? AND ? AND a.TIPO = ?
ORDER BY a.APELLIDO1

Para realizarlo, los haríamos de la siguiente forma:

SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY a.NOMBRE) AS num,
a.NOMBRE, a.TIPO, a.FECNAC,
a.APELLIDO1, a.COD_POSTAL, b.COD_NOMBRE
FROM usuarios AS a
INNER JOIN codpostal AS b ON a.COD_POSTAL = b.COD_POSTAL
WHERE a.FECNAC BETWEEN ? AND ? AND a.TIPO = ?
) AS sub
WHERE (num >= 30 AND num <= 40)

En caso de no necesitar ordenar por ningún campo en concreto, podemos utilizar:

ROW_NUMBER() OVER(ORDER BY (SELECT 1))

Espero que este pequeño truco os pueda ser de ayuda.