Forums Últimos mensajes - Powered by IBM
 

Select y update en un solo proceso atómico

17/05/2006 - 19:26 por Roland | Informe spam
Disculpen si esta consulta ya está contestada pero no pude encontrar la
respuesta... les comento cuál es mi problema:
Tengo que seleccionar un registro de la base de datos y marcarlo para poder
usarlo (es decir, hago que ese registro sea mío).
Sin embargo, entre la lectura (select) y la marca que le hago al registro
para apropiarlo (update), existe otro usuario que realiza el select después
del mío y antes de que yo lo marque como mi registro.
El problema es que desde 2 estaciones de trabajo distintas nos apropiamos
del mismo registro...
Necesito hacer un select y luego un update como un solo proceso atómico
para obtener el ID de ese registro y asegurarme de que nadie lo va a tomar.
Desde ya les agradezco sus sugerencias.
 

Leer las respuestas

#1 Alejandro Mesa
17/05/2006 - 19:51 | Informe spam
Roland,

Una forma seria usando un "table_hint" en la sentencia "select".

begin transaction

select c1, ..., cn
from dbo.t1 with (UPDLOCK)
where pk = @pk and ...

update dbo.t1
set ...

commit transaction

Otra forma de hacerlo seria actuaizando la fila directamente sin una
seleccion previa.

update dbo.t1
set ...
where pk = @pk and ...

set @rc = @@rowcount

if @rc = 0 -- entonces no pudistes tomar la fila porque pertenece a otro
usuario
...


AMB


"Roland" wrote:

Disculpen si esta consulta ya está contestada pero no pude encontrar la
respuesta... les comento cuál es mi problema:
Tengo que seleccionar un registro de la base de datos y marcarlo para poder
usarlo (es decir, hago que ese registro sea mío).
Sin embargo, entre la lectura (select) y la marca que le hago al registro
para apropiarlo (update), existe otro usuario que realiza el select después
del mío y antes de que yo lo marque como mi registro.
El problema es que desde 2 estaciones de trabajo distintas nos apropiamos
del mismo registro...
Necesito hacer un select y luego un update como un solo proceso atómico
para obtener el ID de ese registro y asegurarme de que nadie lo va a tomar.
Desde ya les agradezco sus sugerencias.



Preguntas similares