devolver un registro

04/10/2007 - 16:35 por Lars | Informe spam
Tengo varios servicios leyendo a la vez datos de una tabla. Con cada
registro hay que invocar a otro sistema. Los servicios ejecutan una query
con el registro que debe procesar. ¿Cómo puedo hacer para que no se devuelva
el mismo registro dos veces a servicios distintos?
 

Leer las respuestas

#1 Alberto Poblacion
04/10/2007 - 17:26 | Informe spam
"Lars" wrote in message
news:
Tengo varios servicios leyendo a la vez datos de una tabla. Con cada
registro hay que invocar a otro sistema. Los servicios ejecutan una query
con el registro que debe procesar. ¿Cómo puedo hacer para que no se
devuelva el mismo registro dos veces a servicios distintos?



Podrías añadirle a cada registro un campo booleano que indique
"yaLeido". Cuando vayas a leer, inicias una transacción, lees el registro
(con un "select ... where YaLeido=0") y le pones a true el bit, y haces un
commit (Lo de la transacción es para que se quede bloqueado mientras haces
esto, de forma que no lo lea otro servicio precisamente en ese momento).
Si no puedes modificar el registro, pero tiene algún identificador único
creciente (por ejemplo, una clave primaria de tipo Identity), puedes usar
una tabla auxiliar para guardar el Id del último registro procesado, y que
todos los servicios hagan un "select ... where Id>ultimoId". Y si no tienes
un identificador de este tipo, crea una tabla paralela de "registros ya
procesados" y en el Select pon un "...where not clave in
RegistrosProcesados". Obviamente, en todos los casos, usando una transacción
para controlar la concurrencia.

Preguntas similares