Consulta a un campo integer (es un contador), incrementarlo y coger nuevo valor de manera atómica.

22/04/2005 - 13:29 por Jsenso | Informe spam
Hola como puedo hacer, una consulta de actualización a un campo del tipo
integer, que es un contador, incrementarlo y coger su nuevo valor de manera
atómica.
De manera atómica significa, que mientras haya iniciado la consulta y hasta
que no haya acabado nadie puede acceder al valor del contador.

Saludos, Javier.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
22/04/2005 - 13:51 | Informe spam
Por que no usas la propiedad IDENTITY?, SQL Server hara eso por ti.


AMB

"Jsenso" wrote:

Hola como puedo hacer, una consulta de actualización a un campo del tipo
integer, que es un contador, incrementarlo y coger su nuevo valor de manera
atómica.
De manera atómica significa, que mientras haya iniciado la consulta y hasta
que no haya acabado nadie puede acceder al valor del contador.

Saludos, Javier.





Respuesta Responder a este mensaje
#2 Jsenso
22/04/2005 - 14:24 | Informe spam
Hola Alejandro,
porque creo que necesitas añadir un nuevo registro, para que se
autoincremente en la tabla.
Yo en esta tabla tengo un unico registro, que debe ser incrementado de forma
atómica por muchos usuarios que trabajan en la aplicación.

Se me ocurre una idea pero no si es válida,

utilizar un campo Identity, para que se autoincremente. Y cada vez que se
tenga
que incrementar , añadir un registro nuevo, y hacer un select max( de este
campo)
para obtener el valor máximo, y eliminar todos los que este por debajo de
este valor.
Pero claro, estas operaciones no son atómicas y vuelvo a lo mismo del
principio...

Saludos, Javier


"Alejandro Mesa" escribió en el
mensaje news:
Por que no usas la propiedad IDENTITY?, SQL Server hara eso por ti.


AMB

"Jsenso" wrote:

> Hola como puedo hacer, una consulta de actualización a un campo del tipo
> integer, que es un contador, incrementarlo y coger su nuevo valor de


manera
> atómica.
> De manera atómica significa, que mientras haya iniciado la consulta y


hasta
> que no haya acabado nadie puede acceder al valor del contador.
>
> Saludos, Javier.
>
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
22/04/2005 - 14:36 | Informe spam
Entonces crea un procedimiento con un parametro de salida.

Ejemplo:

create table dbo.t (
colA int not null default (0)
)
go

insert into t default values
go

create procedure dbo.usp_proc1
@new_value int output
as
set nocount on

update dbo.t
set @new_value = colA = colA + 1

return @@error
go

declare @i int
declare @rv int

exec @rv = dbo.usp_proc1 @i output

if @@error = 0 and @rv = 0
print @i
else
print 'Hubo un error durante la ejecucion del procedimiento.'
go

Este procedimeinto puede ser llamado para incrementar el valor y devolver el
nuevo.


AMB

"Jsenso" wrote:

Hola Alejandro,
porque creo que necesitas añadir un nuevo registro, para que se
autoincremente en la tabla.
Yo en esta tabla tengo un unico registro, que debe ser incrementado de forma
atómica por muchos usuarios que trabajan en la aplicación.

Se me ocurre una idea pero no si es válida,

utilizar un campo Identity, para que se autoincremente. Y cada vez que se
tenga
que incrementar , añadir un registro nuevo, y hacer un select max( de este
campo)
para obtener el valor máximo, y eliminar todos los que este por debajo de
este valor.
Pero claro, estas operaciones no son atómicas y vuelvo a lo mismo del
principio...

Saludos, Javier


"Alejandro Mesa" escribió en el
mensaje news:
> Por que no usas la propiedad IDENTITY?, SQL Server hara eso por ti.
>
>
> AMB
>
> "Jsenso" wrote:
>
> > Hola como puedo hacer, una consulta de actualización a un campo del tipo
> > integer, que es un contador, incrementarlo y coger su nuevo valor de
manera
> > atómica.
> > De manera atómica significa, que mientras haya iniciado la consulta y
hasta
> > que no haya acabado nadie puede acceder al valor del contador.
> >
> > Saludos, Javier.
> >
> >
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida