Problemas con Bloqueos

26/09/2005 - 21:23 por ernessan | Informe spam
Hola a todos..


El tema es el siguiente:

Tenia una aplicacion con cursores la cual me daba miles de problemas con
bloqueos e interbloqueos, hasta el punto de modificar todos los sp. eliminar
todos los cursores y cambiarlo todo por variables de tipo tabla en la cual
inserto los valores que antes recorria con el cursor. Ahora utilizon un
While para recorreme las variable de tipo tabla de la siguiente manera:


DECLARE @dTraspaso TABLE(
rowId INT Identity,
DTraspaso INT NOT NULL,
IdArticulo INT NOT NULL)


INSERT INTO @dTraspaso
SELECT DTRA_IdDTraspaso,DTRA_IdArticulo
FROM DTraspaso001 WITH (NOLOCK)
WHERE DTRA_IdCTraspaso=@lIdCTraspaso


SELECT @iNumFilasDTraspaso=COUNT(*)
FROM @dTraspaso



set @iContadorDTraspaso=0

while @iContadorDTraspaso<@iNumFilasDTraspaso
begin
set @iContadorDTraspaso = @iContadorDTraspaso + 1

SELECT @lIdDTraspaso=DTraspaso,@lIdArticulo=IdArticulo
FROM @dTraspaso
WHERE ROWID=@iContadorDTraspaso

resto de instrucciones


CONTINUE
end

Dentro del cuerpo de ese bucle tengo otros dos bucles similares de tablas
hijas que recorro de la misma manera.

El caso es que al ejecutar la aplicacion desde vb en dos maquinas diferentes
cada una con una transaccion desde vb, se me producen interbloqueos.

que estoy haciendo mal??

En ese caso, que seguro que si, como podria recorrer una tabla A, que tiene
una tabla hija B con N registros, y la tabla B tiene una Tablas Hija C con
N registors
que debo recorrer si usar cursores ni variables de tipo tabla?? No se
me ocurre nada.

Existe alguna manera de definir los bloqueos o debo dejar tarbajar al
servidor por si solo??
Porque me bloquea las tablas que tienen select??

Muchas gracias por su ayuda

Ernessan
 

Leer las respuestas

#1 Maxi
27/09/2005 - 13:39 | Informe spam
Hola, volvemos al principio!! NO DEBES PENSAR EN CURSORES!! estas armando
otra vez un cursor pero ahora en una tabla en memoria!! porque no nos
indicas bien que hace ese codigo y vemos como sacar el cursor!!

Gracias!!


Salu2
Maxi


"ernessan" <ernestoARROBAbyte-factory.com> escribió en el mensaje
news:%23O222%
Hola a todos..


El tema es el siguiente:

Tenia una aplicacion con cursores la cual me daba miles de problemas con
bloqueos e interbloqueos, hasta el punto de modificar todos los sp.
eliminar
todos los cursores y cambiarlo todo por variables de tipo tabla en la cual
inserto los valores que antes recorria con el cursor. Ahora utilizon un
While para recorreme las variable de tipo tabla de la siguiente manera:


DECLARE @dTraspaso TABLE(
rowId INT Identity,
DTraspaso INT NOT NULL,
IdArticulo INT NOT NULL)


INSERT INTO @dTraspaso
SELECT DTRA_IdDTraspaso,DTRA_IdArticulo
FROM DTraspaso001 WITH (NOLOCK)
WHERE DTRA_IdCTraspaso=@lIdCTraspaso


SELECT @iNumFilasDTraspaso=COUNT(*)
FROM @dTraspaso



set @iContadorDTraspaso=0

while @iContadorDTraspaso<@iNumFilasDTraspaso
begin
set @iContadorDTraspaso = @iContadorDTraspaso + 1

SELECT @lIdDTraspaso=DTraspaso,@lIdArticulo=IdArticulo
FROM @dTraspaso
WHERE ROWID=@iContadorDTraspaso

resto de instrucciones


CONTINUE
end

Dentro del cuerpo de ese bucle tengo otros dos bucles similares de tablas
hijas que recorro de la misma manera.

El caso es que al ejecutar la aplicacion desde vb en dos maquinas
diferentes
cada una con una transaccion desde vb, se me producen interbloqueos.

que estoy haciendo mal??

En ese caso, que seguro que si, como podria recorrer una tabla A, que
tiene
una tabla hija B con N registros, y la tabla B tiene una Tablas Hija C
con
N registors
que debo recorrer si usar cursores ni variables de tipo tabla?? No se
me ocurre nada.

Existe alguna manera de definir los bloqueos o debo dejar tarbajar al
servidor por si solo??
Porque me bloquea las tablas que tienen select??

Muchas gracias por su ayuda

Ernessan






Preguntas similares