Cómo obtener en SQLServer el identificador de registro anterior y del registro siguiente, además del actual

Posted on noviembre 11, 2014

0



Algunas veces, hay que emular el funcionamiento de una aplicación de VFOX en SQLServer, y una de las cosas que se suelen pedir es el botón siguiente/anterior/primero/último.

Este tipo de botones de navegación, muy fáciles de hacer en FoxPro cuando tienes la tabla abierta y con un índice concreto habilitado, resulta tedioso cuando se hace mediante peticiones Select a un servidor remoto, en el que no se guarda ningún cursor, y en el que no mantienes una conexión abierta constantemente.

Supongamos que tenemos un campo CLAVEREG con una clave única de 36 carácteres tipo GUID. Si pedimos al servidor un registro concreto, ¿cómo sabes cual es el siguiente, si cuando lo consultó el usuario estaba ordenado por la descripción, y no ordenado por un UNIQUEID o por el CLAVEREG/GUID ?

Para hacer esto, existen varios métodos, pero no ha sido hasta SQLServer 2008R2 o mejor SQL Server 2012, cuando Microsoft ha implementado una opción más interesante y sencilla.

Observa la siguiente instrucción de ejemplo:

select nombretabla.descrip, nombretabla.clavereg, lag(nombretabla.clavereg) over (order by nombretabla.descrip) PreviousValue,lead(nombretabla.clavereg) over (order by nombretabla.descrip) NextValue from nombretabla

Esta instrucción genera el campo descripción (descrip), el campo clave actual (clavereg),  la clave anterior (PreviousValue) y la siguiente clave (NextValue). Para saber qué clave es la anterior  y la siguiente, se le indica que use el orden de la descripción para obtenerla.

Las funciones usadas son LAG y LEAD.

Espero que os sirva de ayuda.

Posted in: Foxpro, SQLServer