Notas .NET

Thursday, August 10, 2006

Un query para paginar a nuestro antojo.

Veamos este primer ejemplo que tomará los primeros 10 registros encontrados en la tabla Clientes:

SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 0 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente


Ahora tomando los siguientes 10 registros:

SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 10 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente


Ahora tomando el tercer grupo (TOP 20) de 10 registros (TOP 10):

SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente


Obsérvese la aplicación de filtros al ejemplo anterior.

SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
WHERE Vigencia > GetDate()
ORDER BY IdCliente
)
AND WHERE Vigencia > GetDate()
ORDER BY IdCliente


¿Cómo vincular dos BD's en una sentencia SQL?


En términos sencillos, la idea aquí es juntar en una sola sentencia dos tablas que pertenezcan a distintas bases de datos SQL.

Algunas veces requerimos accesar a dos bases de datos para obtener cierta información. Por ejemplo, supongamos que en una BD tenemos los datos personales de todos los clientes y queremos "pegarle" a esta información otro dato existente en otra BD. Este dato podría ser, por ejemplo, cuánto ha consumido de nuestros productos. De ese modo tenemos algo así:


SELECT * FROM BdPrincipal..Clientes
INNER JOIN BdDetalles..Consumos
ON (BdPrincipal..Clientes.IdCliente = BdDetalles..Consumos.IdCliente)


Ambas bases deberán estar funcionando bajo el mismo lenguaje, de otro modo nuestra sentencia será algo como:


SELECT * FROM BdPrincipal..Clientes
INNER JOIN BdDetalles..Consumos
ON (
BdPrincipal..Clientes.IdCliente COLLATE SQL_Latin1_General_CP1253_CS_AS
=
BdDetalles..Consumos.IdCliente COLLATE SQL_Latin1_General_CP1253_CS_AS
)


El idioma lo podemos verificar en la configuración de cada base (SQL Manager)