utilizar una consulta para procesar

30/10/2003 - 18:41 por Sanchez Arnoletto Martin Rodrigo | Informe spam
Hola grupo:

En un procedimiento almacenado (usp_recarga ) tengo una consulta donde
obtengo una serie de codigos de componentes y un proceso almacenado que me
calcula el precio descompuesto de cada artículo:

select idcomponente from componentes

y EXEC usp_precio(@idcomponente,@precioret output)

lo que tengo que hacer es ejecutar el procedimiento almacenado para cada
idcomponente, y coger @precioret y procesarlo segun si ha cambiado

Hay alguna forma de hacerlo sin cursores, ya que ralentizan mucho la
operacion


Gracias desde ya


Saludos...



Ing. Martin Rodrigo Sanchez Arnoletto
Islas Baleares - España
mrsarnolettoQUITAR@hotmail.QUITARcom

Preguntas similare

Leer las respuestas

#1 Isaías
30/10/2003 - 20:39 | Informe spam
No se los demas foristas, a mi me gustaria ver su codigo
donde maneja los CURSORES.
Respuesta Responder a este mensaje
#2 Eladio Rincón
30/10/2003 - 23:39 | Informe spam
Hola,

podrías postear la definición de los sp's y la lógica del proceso que quieres hacer?
me gustaría intentar resolverlo sin cursores ;-)

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Sanchez Arnoletto Martin Rodrigo" escribió en el mensaje news:
Hola grupo:

En un procedimiento almacenado (usp_recarga ) tengo una consulta donde
obtengo una serie de codigos de componentes y un proceso almacenado que me
calcula el precio descompuesto de cada artículo:

select idcomponente from componentes

y EXEC usp_precio(@idcomponente,@precioret output)

lo que tengo que hacer es ejecutar el procedimiento almacenado para cada
idcomponente, y coger @precioret y procesarlo segun si ha cambiado

Hay alguna forma de hacerlo sin cursores, ya que ralentizan mucho la
operacion


Gracias desde ya


Saludos...



Ing. Martin Rodrigo Sanchez Arnoletto
Islas Baleares - España



Respuesta Responder a este mensaje
#3 Sanchez Arnoletto Martin Rodrigo
31/10/2003 - 08:42 | Informe spam
Es sencillo:
Tengo que cambiar el precio de cada componente relacionado con un
componente en especial que es el que estoy modificando, asi, por ejemplo
tengo la tabla de armado, la de costos

en la de Armado tengo:
idcomponente comidcomponente cantidad
D0002.0010 A0001.0010 0.05
D0002.0010 B0001.0005 0.5
D0002.0010 B0002.0010 0.3
D0003.0020 B0001.0005 0.7
D0003.0020 B0005.0002 3.5
D0004.0020 B0004.0010 2.5
D0004.0020 A0001.0010 3.4
A0001.0010 B0001.0005 3.2
A0001.0010 B0002.0010 2.2

De lo que se desprende por ejemplo que el componente B0001.0005 participa
en la formacion de:
D0002.0010, D0003.0020, D0004.0020, A0001.00010, e indirectamente ( porque
forma el A0001.00010) en la de D0004.0020 y D0002.0010 ( fijense que en este
ultimo lo hace directa en indirectamente) y puede habe n concatenaciones de
hijos de hijos de hijos.

por otro lado tengo un store procedure (que esta hecho integramente sin
cursores, por la brigada anticursores que encabeza liliana jaja) que yo le
paso un componente y me devuelve el precio recalculado de toda la
descomposicion de dicho componente en la lista que yo quiero, por ejemplo:

exec usp_precio @idcomponente='D0002.0010' me devuelve el precio
de costo calculado desde los componentes basicos hasta este.
exec usp_precio @idcomponente='D0002.0010', @idlista='001' me devuelve el
precio de la lista 001 del componente calculado en base a la lista 1

Bueno el problema:
que cuando debo variar varío por ejemplo el precio de la lista 001 del
componente 'B0001.0005' tambien debo variar todos los precios de sus
componentes relacionados, entonces:

HASTA AHORA LO QUE HAGO ES:

SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE (COM_IDCOMPONENTE @idcomponente) or
(IDCOMPONENTE = @idcomponente) OR (COM_IDCOMPONENTE IN
(SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE
(COM_IDCOMPONENTE = @idcomponente)))

la cargo en un cursor y la barro con fetchnext hasta eof()
preguntando por cada uno de los idcomponentes al procedimiento almacenado
y si ha variado , le hago un update
y si no existe el precio lo inserto y el calculado es distinto de cero

la pregunta:
Existe alguna forma de hacer esto mediante sql
?
Gracias desde ya

Saludos...



Ing. Martin Rodrigo Sanchez Arnoletto
Islas Baleares - España













"Sanchez Arnoletto Martin Rodrigo" escribió en el
mensaje news:
Hola grupo:

En un procedimiento almacenado (usp_recarga ) tengo una consulta donde
obtengo una serie de codigos de componentes y un proceso almacenado que me
calcula el precio descompuesto de cada artículo:

select idcomponente from componentes

y EXEC usp_precio(@idcomponente,@precioret output)

lo que tengo que hacer es ejecutar el procedimiento almacenado para cada
idcomponente, y coger @precioret y procesarlo segun si ha cambiado

Hay alguna forma de hacerlo sin cursores, ya que ralentizan mucho la
operacion


Gracias desde ya


Saludos...



Ing. Martin Rodrigo Sanchez Arnoletto
Islas Baleares - España



Respuesta Responder a este mensaje
#4 Eladio Rincón
02/11/2003 - 23:57 | Informe spam
Hola,

no me gustaría simplificar el problema pero quería comentarte algo:

los componentes que quieres actualizar los obtienes con:


SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE (COM_IDCOMPONENTE @idcomponente) or
(IDCOMPONENTE = @idcomponente) OR (COM_IDCOMPONENTE IN
(SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE
(COM_IDCOMPONENTE = @idcomponente)))

y dentro del procedimiento almacenado usp_precio tienes un UPDATE que recibe como argumento el @idComponente.

si dentro del procedimiento tienes (insisto, no quiero simplificar porque no conozco el proceso):

UPDATE tabla
SET valor = nuevo_valor
WHERE IdComponente = @idComponente

podrías cruzar el UPDATE con la SELECT de los Componentes (la primera que he escrito):

UPDATE t
SET t.valor = nuevo_valor
FROM tabla t INNER JOIN
(
SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE (COM_IDCOMPONENTE @idcomponente) or
(IDCOMPONENTE = @idcomponente) OR (COM_IDCOMPONENTE IN
(SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE
(COM_IDCOMPONENTE = @idcomponente)))
) v
ON t.IdComponente = v.IdComponente

igual he simplificado demasiado, pero espero que te sirva ...

Saludos,

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Sanchez Arnoletto Martin Rodrigo" escribió en el mensaje news:
Es sencillo:
Tengo que cambiar el precio de cada componente relacionado con un
componente en especial que es el que estoy modificando, asi, por ejemplo
tengo la tabla de armado, la de costos

en la de Armado tengo:
idcomponente comidcomponente cantidad
D0002.0010 A0001.0010 0.05
D0002.0010 B0001.0005 0.5
D0002.0010 B0002.0010 0.3
D0003.0020 B0001.0005 0.7
D0003.0020 B0005.0002 3.5
D0004.0020 B0004.0010 2.5
D0004.0020 A0001.0010 3.4
A0001.0010 B0001.0005 3.2
A0001.0010 B0002.0010 2.2

De lo que se desprende por ejemplo que el componente B0001.0005 participa
en la formacion de:
D0002.0010, D0003.0020, D0004.0020, A0001.00010, e indirectamente ( porque
forma el A0001.00010) en la de D0004.0020 y D0002.0010 ( fijense que en este
ultimo lo hace directa en indirectamente) y puede habe n concatenaciones de
hijos de hijos de hijos.

por otro lado tengo un store procedure (que esta hecho integramente sin
cursores, por la brigada anticursores que encabeza liliana jaja) que yo le
paso un componente y me devuelve el precio recalculado de toda la
descomposicion de dicho componente en la lista que yo quiero, por ejemplo:

exec usp_precio @idcomponente='D0002.0010' me devuelve el precio
de costo calculado desde los componentes basicos hasta este.
exec usp_precio @idcomponente='D0002.0010', @idlista='001' me devuelve el
precio de la lista 001 del componente calculado en base a la lista 1

Bueno el problema:
que cuando debo variar varío por ejemplo el precio de la lista 001 del
componente 'B0001.0005' tambien debo variar todos los precios de sus
componentes relacionados, entonces:

HASTA AHORA LO QUE HAGO ES:

SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE (COM_IDCOMPONENTE > @idcomponente) or
(IDCOMPONENTE = @idcomponente) OR (COM_IDCOMPONENTE IN
(SELECT DISTINCT IDCOMPONENTE FROM ARMADO WHERE
(COM_IDCOMPONENTE = @idcomponente)))

la cargo en un cursor y la barro con fetchnext hasta eof()
preguntando por cada uno de los idcomponentes al procedimiento almacenado
y si ha variado , le hago un update
y si no existe el precio lo inserto y el calculado es distinto de cero

la pregunta:
Existe alguna forma de hacer esto mediante sql
?
Gracias desde ya

Saludos...



Ing. Martin Rodrigo Sanchez Arnoletto
Islas Baleares - España













"Sanchez Arnoletto Martin Rodrigo" escribió en el
mensaje news:
> Hola grupo:
>
> En un procedimiento almacenado (usp_recarga ) tengo una consulta donde
> obtengo una serie de codigos de componentes y un proceso almacenado que me
> calcula el precio descompuesto de cada artículo:
>
> select idcomponente from componentes
>
> y EXEC usp_precio(@idcomponente,@precioret output)
>
> lo que tengo que hacer es ejecutar el procedimiento almacenado para cada
> idcomponente, y coger @precioret y procesarlo segun si ha cambiado
>
> Hay alguna forma de hacerlo sin cursores, ya que ralentizan mucho la
> operacion
>
>
> Gracias desde ya
>
>
> Saludos...
>
>
>
> Ing. Martin Rodrigo Sanchez Arnoletto
> Islas Baleares - España
>
>
>


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