Como bloquear/desbloquear una tabla en SQL?

23/08/2005 - 19:44 por Gabriel South | Informe spam
Hola,

Tengo una pregunta tecnica para hacerles. Resulta que en un stored procedure
quiero bloquear temporariamente una tabla para trabajar con ella y no
liberarla hasta que finalice el procedimiento, por ahora lo estoy haciendo
con BEGIN TRANSACTION... pero queria saber si hay algun metodo/instruccion
para bloquear alguna tabla especifica sin usar el BEGINT TRAN

Gracias, Gabriel..

Preguntas similare

Leer las respuestas

#1 Maxi
23/08/2005 - 19:45 | Informe spam
Hola, bloquear toda una tabla no es para nada una buena idea!! que hace ese
proceso?


Salu2
Maxi


"Gabriel South" escribió en el mensaje
news:
Hola,

Tengo una pregunta tecnica para hacerles. Resulta que en un stored
procedure
quiero bloquear temporariamente una tabla para trabajar con ella y no
liberarla hasta que finalice el procedimiento, por ahora lo estoy haciendo
con BEGIN TRANSACTION... pero queria saber si hay algun metodo/instruccion
para bloquear alguna tabla especifica sin usar el BEGINT TRAN

Gracias, Gabriel..



Respuesta Responder a este mensaje
#2 Gabriel South
23/08/2005 - 19:59 | Informe spam
Hola maxi..

Lo siguiente, preciso obtener un numero de un campo que otros procesos
(sistemas) autonumeran (incrementando, usando sus propios metodos) y sumarle
1.
Una vez sumado, yo genero otro registro con datos y ese numero.
Cabe aclarar que ese numero es unico y primary key.

La tabla es bloqueada por muy poco tiempo, solo el tiempo que tarda en tomar
ese numero e insertar el registro, de esa forma me aseguro que otros
procesos no esten insertando algun registro con mi numero.

Da para entender?

Gracias...



"Maxi" wrote in message
news:#
Hola, bloquear toda una tabla no es para nada una buena idea!! que hace


ese
proceso?


Salu2
Maxi


"Gabriel South" escribió en el mensaje
news:
> Hola,
>
> Tengo una pregunta tecnica para hacerles. Resulta que en un stored
> procedure
> quiero bloquear temporariamente una tabla para trabajar con ella y no
> liberarla hasta que finalice el procedimiento, por ahora lo estoy


haciendo
> con BEGIN TRANSACTION... pero queria saber si hay algun


metodo/instruccion
> para bloquear alguna tabla especifica sin usar el BEGINT TRAN
>
> Gracias, Gabriel..
>
>
>


Respuesta Responder a este mensaje
#3 Maxi
23/08/2005 - 20:10 | Informe spam
Hola, mmm te entiendo a medias!! probaste de usar triggers?


Salu2
Maxi


"Gabriel South" escribió en el mensaje
news:%
Hola maxi..

Lo siguiente, preciso obtener un numero de un campo que otros procesos
(sistemas) autonumeran (incrementando, usando sus propios metodos) y
sumarle
1.
Una vez sumado, yo genero otro registro con datos y ese numero.
Cabe aclarar que ese numero es unico y primary key.

La tabla es bloqueada por muy poco tiempo, solo el tiempo que tarda en
tomar
ese numero e insertar el registro, de esa forma me aseguro que otros
procesos no esten insertando algun registro con mi numero.

Da para entender?

Gracias...



"Maxi" wrote in message
news:#
Hola, bloquear toda una tabla no es para nada una buena idea!! que hace


ese
proceso?


Salu2
Maxi


"Gabriel South" escribió en el mensaje
news:
> Hola,
>
> Tengo una pregunta tecnica para hacerles. Resulta que en un stored
> procedure
> quiero bloquear temporariamente una tabla para trabajar con ella y no
> liberarla hasta que finalice el procedimiento, por ahora lo estoy


haciendo
> con BEGIN TRANSACTION... pero queria saber si hay algun


metodo/instruccion
> para bloquear alguna tabla especifica sin usar el BEGINT TRAN
>
> Gracias, Gabriel..
>
>
>






Respuesta Responder a este mensaje
#4 Alejandro Mesa
23/08/2005 - 20:11 | Informe spam
Gabriel puedes crear un procedimiento almacenado encargado de incrementar la
columna y devolver ese valor.

create procedure dbo.p1
@next_id int output
as
set nocount on

update t1
set @next_id = c1 = c1 + 1

return @@error
go

create procedure dbo.p2
@p1 int,
@p2 varchar(25)
as
set nocount on

declare @rv int
declare @error int
declare @next_id int

begin transaction

exec @rv = dbo.p1 @next_id output

set @error = coalesce(nullif(@rv, 0), @@error)

if @error != 0 goto ErrorHandler

insert into t1(c1, c2, c3)
values(@next_id, @p1, @p2)

set @error = @@error

if @error != 0 goto ErrorHandler

commit transaction

return @@error

ErrorHandler:
if @@trancount > 0
begin
rollback transaction
raiserror('Error insertando tal y mas cual entidad.', 16, 1)
end
go


AMB

"Gabriel South" wrote:

Hola maxi..

Lo siguiente, preciso obtener un numero de un campo que otros procesos
(sistemas) autonumeran (incrementando, usando sus propios metodos) y sumarle
1.
Una vez sumado, yo genero otro registro con datos y ese numero.
Cabe aclarar que ese numero es unico y primary key.

La tabla es bloqueada por muy poco tiempo, solo el tiempo que tarda en tomar
ese numero e insertar el registro, de esa forma me aseguro que otros
procesos no esten insertando algun registro con mi numero.

Da para entender?

Gracias...



"Maxi" wrote in message
news:#
> Hola, bloquear toda una tabla no es para nada una buena idea!! que hace
ese
> proceso?
>
>
> Salu2
> Maxi
>
>
> "Gabriel South" escribió en el mensaje
> news:
> > Hola,
> >
> > Tengo una pregunta tecnica para hacerles. Resulta que en un stored
> > procedure
> > quiero bloquear temporariamente una tabla para trabajar con ella y no
> > liberarla hasta que finalice el procedimiento, por ahora lo estoy
haciendo
> > con BEGIN TRANSACTION... pero queria saber si hay algun
metodo/instruccion
> > para bloquear alguna tabla especifica sin usar el BEGINT TRAN
> >
> > Gracias, Gabriel..
> >
> >
> >
>
>



Respuesta Responder a este mensaje
#5 Gabriel South
23/08/2005 - 20:15 | Informe spam
Me olvide de decir, seria un bloqueo solo para insercion... permitiendo a
otros procesos modificar los datos...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida