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

Preguntas similare

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






Respuesta Responder a este mensaje
#2 Alejandro Mesa
27/09/2005 - 14:52 | Informe spam
ernessan,

Si de verdad deseas que te ayudemos, dinos lo que quieres hacer y no como lo
quieres hacer.


AMB

"ernessan" wrote:

ok... Adjunto el sp con las variables de tipo table, a ver si me puedes
iustrar

El tema, a groso modo es que yo tengo un Tabla de Albaranes, que a su vez
tiene una tabla
hija con el detalle del albaran con N Filas con relacion a ese Albaran, para
cada fila del detalle de Albaran, tengo N Colores, y cada uno de esos
colores tiene N tallas, por lo que yo entiendo que la forma mas facil de
recorrerlo en un sp es

Recupero DAlBaran
Recorrer DAlbaran
Recupero Colores de DAlbaran
Recorro Colores
Recupero Tallas
Recorro Tallas y hago la operaciones

No se me ocurre como obviar los cursores..


Gracias

Ernessan

"Maxi" escribió en el mensaje
news:
> 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
> >
> >
> >
> >
> >
> >
>
>



Respuesta Responder a este mensaje
#3 Maxi
28/09/2005 - 03:00 | Informe spam
Opino igual a ti!! sino es casi imposible adivinar :(


Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
ernessan,

Si de verdad deseas que te ayudemos, dinos lo que quieres hacer y no como
lo
quieres hacer.


AMB

"ernessan" wrote:

ok... Adjunto el sp con las variables de tipo table, a ver si me
puedes
iustrar

El tema, a groso modo es que yo tengo un Tabla de Albaranes, que a su vez
tiene una tabla
hija con el detalle del albaran con N Filas con relacion a ese Albaran,
para
cada fila del detalle de Albaran, tengo N Colores, y cada uno de esos
colores tiene N tallas, por lo que yo entiendo que la forma mas facil de
recorrerlo en un sp es

Recupero DAlBaran
Recorrer DAlbaran
Recupero Colores de DAlbaran
Recorro Colores
Recupero Tallas
Recorro Tallas y hago la operaciones

No se me ocurre como obviar los cursores..


Gracias

Ernessan

"Maxi" escribió en el mensaje
news:
> 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
> >
> >
> >
> >
> >
> >
>
>



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