Manipular Registros

02/11/2006 - 17:41 por lucho | Informe spam
Buenos dias Grupo:

Tengo la siguiente pregunta:


Tengo en una tabla un conjungo de registros como el siguiente:

||
ID || CODIGO_PRODUCTO ||
== ||
1 || 1244 ||
==2 || 3366 ||
==3 || 1566 ||
==4 || 9932 ||
==


Necisito construir un procedimiento almacenado que tome como parámetro el
CODIGO_PRODUCTO y ejecute una serie de acciones en otras tablas (eso lo
tengo claro).

El problema es como puedo hacer para que el procemiento tome uno a uno los
registros y los procese ? es necesario utilizar cursores ?


Agradezco de antemano su colaboración


Atentamente



LUCHO

Preguntas similare

Leer las respuestas

#6 Javier Loria
08/11/2006 - 17:17 | Informe spam
Hola Lucho:
Una consulta antes de ayudarte, tienes SQL 2000 o 2005, es que hay
algunas mejoras que te podrian ayudar.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"lucho" wrote in message
news:
Muchas gracias Javier:

La idea tuya es buena, y de hecho la aplico; de pronto te pongo otro caso:

Tengo la misma Tabla de Contratos:

||
ID || CODIGO_CONTRATO||
== ||
1 || 1244 ||
==> 2 || 3366 ||
==> 3 || 1566 ||
==> 4 || 9932 ||
==>
ahora tengo un procedimiento almacenado que renueva cada contrato,
corriendo
el procedimiento de manera manual, metiendo uno a uno estos valores:

=> ALTER PROCEDURE SP_HISTORICOCONTRATOS_RENOVACION
@CONTRATO NUMERIC (8)
AS

DECLARE @NUEVOCONTRATO NUMERIC (8)

UPDATE NUMEROSAUTOMATICOS
SET ULTIMONUMERO9 = ULTIMONUMERO9 + 1
WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO'

contrato
SET @NUEVOCONTRATO = (SELECT ULTIMONUMERO9 FROM NUMEROSAUTOMATICOS
WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO')

INSERT INTO HISTORICOCONTRATOSMANTENIMIENTO
SELECT * FROM CONTRATOSMANTENIMIENTO WHERE CODIGOCONTRATO = @CONTRATO

INSERT INTO HISTORICOPRODUCTOSCONTRATOS
SELECT * FROM PRODUCTOSCONTRATOS WHERE CODIGOCONTRATO = @CONTRATO

UPDATE HISTORICOCONTRATOSMANTENIMIENTO
SET CODIGOESTADOCONTRATO = 4 --ESTADO TERMINADO
WHERE CODIGOCONTRATO = @CONTRATO

UPDATE CONTRATOSMANTENIMIENTO
SET CODIGOCONTRATO = @NUEVOCONTRATO
WHERE CODIGOCONTRATO = @CONTRATO
UPDATE CONTRATOSMANTENIMIENTO
SET FECHAINICIALCONTRATO = DATEADD(YEAR,1,FECHAINICIALCONTRATO),
FECHAFINALCONTRATO = DATEADD(YEAR,1,FECHAFINALCONTRATO),
CODIGOESTADOCONTRATO = 0
WHERE CODIGOCONTRATO = @NUEVOCONTRATO

con el nuevo número
UPDATE PRODUCTOSCONTRATOS
SET CODIGOCONTRATO = @NUEVOCONTRATO
WHERE CODIGOCONTRATO = @CONTRATO
UPDATE PRODUCTOSCONTRATOS
SET FECHAINICIALPRODUCTOCONTRATO > DATEADD(YEAR,1,FECHAINICIALPRODUCTOCONTRATO), FECHAFINALPRODUCTOCONTRATO > DATEADD(YEAR,1,FECHAFINALPRODUCTOCONTRATO)
WHERE CODIGOCONTRATO = @NUEVOCONTRATO

su vigencia
UPDATE PRODUCTOSCLIENTES
SET FECHAINICIALVINCULO = DATEADD(YEAR,1,FECHAINICIALVINCULO),
FECHAFINALVINCULO = DATEADD(YEAR,1,FECHAFINALVINCULO), CODIGOVINCULOTIPO > @NUEVOCONTRATO, CODIGOESTADOVINCULO = 1
WHERE CODIGOVINCULOTIPO = @CONTRATO
>
Como veras es un poquito grande.

Ahora, lo que necesito es que la variable @CONTRATO tome cada uno de los
registros de la primera tabla y corra ( con este procedimiento renuevo un
contrato de un cliente ); al final me debe generar 4 contratos.

El procedimiento funciona bien, pero me falta la parte de tomar cada
registro y realizar el proceso.


Este caso de pronto debí enviarlo desde el principio, motivo por el cual
pido disculpas; es un ejemplo mas exacto de lo que necesito.

Javier nuevamente Agradezco tu colaboración


ATTT


LUCHO


"Javier Loria" wrote in message
news:%23ef43h2$
Hola Lucho:
Que tal algo como esto:
=>> BEGIN TRAN
INSERT INTO HISTORICOPRODUCTOS
SELECT PRODUCTOSCLIENTES.* -- Seria mejor detallas las columnas
FROM PRODUCTOSCLIENTES
JOIN TablaProcedimiento
ON PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO
WHERE FECHAFINAL <= GETDATE ()
AND CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO

UPDATE PRODUCTOSCLIENTES
SET CODIGOESTADOPRODUCTO = 4
FROM PRODUCTOSCLIENTES
JOIN TablaProcedimiento
ON PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO

COMMIT TRAN
==>> Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning
"lucho" wrote in message
news:um5uhW1$
> Hola:
>
>
> Muchas gracias a los dos por su interes. Les cuento lo que necesito


hacer:
>
> Tengo la tabla que les envie con anterioridad:
>
> ||
> ID || CODIGO_PRODUCTO ||
> == ||
> 1 || 1244 ||
> ==>> > 2 || 3366 ||
> ==>> > 3 || 1566 ||
> ==>> > 4 || 9932 ||
> ==>> >
> Esta tabla aparece cada dia, dado que hay un procedimiento almacenado
> programado que corre todos los dias a las 12 am, y me muestra en este
> listado el codigo de los productos que vencen garantias.
>
> Dado que la aplicacion que tengo es bastante inflexible, tengo que
> hacer
> la
> tarea manualmenete, ingresando los valores en el procedimiento que


aparece
> a
> continuacion, el cual primero pasa los productos a una tabla de


historicos
> y
> luego hace un cambio para actualizar el producto en la tabla de


productos
> del cliente.
> =>> > ALTER PROCEDURE SP_HISTORICOPRODUCTOSVENCIDOS_VENCIDOS
> @CODIGO_PRODUCTO NUMERIC (8)
> AS
> INSERT INTO HISTORICOPRODUCTOS
> SELECT * FROM PRODUCTOSCLIENTES WHERE FECHAFINAL <= GETDATE () AND
> CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO
>
> UPDATE PRODUCTOSCLIENTES
> SET CODIGOESTADOPRODUCTO = 4
> WHERE CODIGOPRDOUCTOCLIENTE = @CODIGO_PRODUCTO
>
> >> >
> Este procedimiento toma cada uno de los codigos que aparece en la tabla
> uno
> (CODIGO_PRODUCTO) y colocar dicho valor en la variable @CODIGO_PRODUCTO


,
> y
> el procedimiento basado en dicho valor, les debe aplicar las


instrucciones
> que aparecen dentro.
>
> Es lo que necesito.
>
> Agradezco si me puden comentar como puedo hacer esto.
>
> Muchas gracias de antemano
>
>
> ATTT
>
>
> LUCHO
>
>
>
> "Salvador Ramos" wrote in message
> news:u5lvOJs$
>> Hola,
>>
>> Te recomiendo que sigas los consejos de Javier. Cuentanos que
>> necesitas
>> hacer exactamente, e intentaremos darte una solución, y si es posible
> evitar
>> el uso de cursores.
>>
>> Un saludo
>> Salvador Ramos
>> Murcia - España
>>
>> [Microsoft MVP SQL Server]
>> www.helpdna.net (información sobre SQL Server y .NET)
>>
>>
>> "lucho" escribió en el mensaje
>> news:OTP1E2p$
>> > Buenos dias Grupo:
>> >
>> > Tengo la siguiente pregunta:
>> >
>> >
>> > Tengo en una tabla un conjungo de registros como el siguiente:
>> >
>> > ||
>> > ID || CODIGO_PRODUCTO ||
>> > == ||
>> > 1 || 1244 ||
>> > ==>> >> > 2 || 3366 ||
>> > ==>> >> > 3 || 1566 ||
>> > ==>> >> > 4 || 9932 ||
>> > ==>> >> >
>> >
>> >
>> > Necisito construir un procedimiento almacenado que tome como


parámetro
> el
>> > CODIGO_PRODUCTO y ejecute una serie de acciones en otras tablas (eso


lo
>> > tengo claro).
>> >
>> > El problema es como puedo hacer para que el procemiento tome uno a


uno
> los
>> > registros y los procese ? es necesario utilizar cursores ?
>> >
>> >
>> > Agradezco de antemano su colaboración
>> >
>> >
>> > Atentamente
>> >
>> >
>> >
>> > LUCHO
>> >
>> >
>>
>>
>
>






Respuesta Responder a este mensaje
#7 lucho
09/11/2006 - 14:35 | Informe spam
hola:

Tengo los dos.



"Javier Loria" wrote in message
news:
Hola Lucho:
Una consulta antes de ayudarte, tienes SQL 2000 o 2005, es que hay
algunas mejoras que te podrian ayudar.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"lucho" wrote in message
news:
> Muchas gracias Javier:
>
> La idea tuya es buena, y de hecho la aplico; de pronto te pongo otro


caso:
>
> Tengo la misma Tabla de Contratos:
>
> ||
> ID || CODIGO_CONTRATO||
> == ||
> 1 || 1244 ||
> ==> > 2 || 3366 ||
> ==> > 3 || 1566 ||
> ==> > 4 || 9932 ||
> ==> >
> ahora tengo un procedimiento almacenado que renueva cada contrato,
> corriendo
> el procedimiento de manera manual, metiendo uno a uno estos valores:
>
> => > ALTER PROCEDURE SP_HISTORICOCONTRATOS_RENOVACION
> @CONTRATO NUMERIC (8)
> AS
>
> DECLARE @NUEVOCONTRATO NUMERIC (8)
>
> UPDATE NUMEROSAUTOMATICOS
> SET ULTIMONUMERO9 = ULTIMONUMERO9 + 1
> WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO'
>
> contrato
> SET @NUEVOCONTRATO = (SELECT ULTIMONUMERO9 FROM NUMEROSAUTOMATICOS
> WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO')
>
> INSERT INTO HISTORICOCONTRATOSMANTENIMIENTO
> SELECT * FROM CONTRATOSMANTENIMIENTO WHERE CODIGOCONTRATO = @CONTRATO
>
> INSERT INTO HISTORICOPRODUCTOSCONTRATOS
> SELECT * FROM PRODUCTOSCONTRATOS WHERE CODIGOCONTRATO = @CONTRATO
>
> UPDATE HISTORICOCONTRATOSMANTENIMIENTO
> SET CODIGOESTADOCONTRATO = 4 --ESTADO TERMINADO
> WHERE CODIGOCONTRATO = @CONTRATO
>
> UPDATE CONTRATOSMANTENIMIENTO
> SET CODIGOCONTRATO = @NUEVOCONTRATO
> WHERE CODIGOCONTRATO = @CONTRATO
> UPDATE CONTRATOSMANTENIMIENTO
> SET FECHAINICIALCONTRATO = DATEADD(YEAR,1,FECHAINICIALCONTRATO),
> FECHAFINALCONTRATO = DATEADD(YEAR,1,FECHAFINALCONTRATO),
> CODIGOESTADOCONTRATO = 0
> WHERE CODIGOCONTRATO = @NUEVOCONTRATO
>


contrato,
> con el nuevo número
> UPDATE PRODUCTOSCONTRATOS
> SET CODIGOCONTRATO = @NUEVOCONTRATO
> WHERE CODIGOCONTRATO = @CONTRATO
> UPDATE PRODUCTOSCONTRATOS
> SET FECHAINICIALPRODUCTOCONTRATO > > DATEADD(YEAR,1,FECHAINICIALPRODUCTOCONTRATO), FECHAFINALPRODUCTOCONTRATO
> DATEADD(YEAR,1,FECHAFINALPRODUCTOCONTRATO)
> WHERE CODIGOCONTRATO = @NUEVOCONTRATO
>


y
> su vigencia
> UPDATE PRODUCTOSCLIENTES
> SET FECHAINICIALVINCULO = DATEADD(YEAR,1,FECHAINICIALVINCULO),
> FECHAFINALVINCULO = DATEADD(YEAR,1,FECHAFINALVINCULO), CODIGOVINCULOTIPO
> @NUEVOCONTRATO, CODIGOESTADOVINCULO = 1
> WHERE CODIGOVINCULOTIPO = @CONTRATO
> > >
> Como veras es un poquito grande.
>
> Ahora, lo que necesito es que la variable @CONTRATO tome cada uno de los
> registros de la primera tabla y corra ( con este procedimiento renuevo


un
> contrato de un cliente ); al final me debe generar 4 contratos.
>
> El procedimiento funciona bien, pero me falta la parte de tomar cada
> registro y realizar el proceso.
>
>
> Este caso de pronto debí enviarlo desde el principio, motivo por el cual
> pido disculpas; es un ejemplo mas exacto de lo que necesito.
>
> Javier nuevamente Agradezco tu colaboración
>
>
> ATTT
>
>
> LUCHO
>
>
> "Javier Loria" wrote in message
> news:%23ef43h2$
>> Hola Lucho:
>> Que tal algo como esto:
>> => >> BEGIN TRAN
>> INSERT INTO HISTORICOPRODUCTOS
>> SELECT PRODUCTOSCLIENTES.* -- Seria mejor detallas las columnas
>> FROM PRODUCTOSCLIENTES
>> JOIN TablaProcedimiento
>> ON PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO
>> WHERE FECHAFINAL <= GETDATE ()
>> AND CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO
>>
>> UPDATE PRODUCTOSCLIENTES
>> SET CODIGOESTADOPRODUCTO = 4
>> FROM PRODUCTOSCLIENTES
>> JOIN TablaProcedimiento
>> ON PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO
>>
>> COMMIT TRAN
>> ==> >> Saludos,
>>
>> Javier Loria
>> Costa Rica-MVP
>> Solid Quality Learning
>> "lucho" wrote in message
>> news:um5uhW1$
>> > Hola:
>> >
>> >
>> > Muchas gracias a los dos por su interes. Les cuento lo que necesito
> hacer:
>> >
>> > Tengo la tabla que les envie con anterioridad:
>> >
>> > ||
>> > ID || CODIGO_PRODUCTO ||
>> > == ||
>> > 1 || 1244 ||
>> > ==> >> > 2 || 3366 ||
>> > ==> >> > 3 || 1566 ||
>> > ==> >> > 4 || 9932 ||
>> > ==> >> >
>> > Esta tabla aparece cada dia, dado que hay un procedimiento almacenado
>> > programado que corre todos los dias a las 12 am, y me muestra en


este
>> > listado el codigo de los productos que vencen garantias.
>> >
>> > Dado que la aplicacion que tengo es bastante inflexible, tengo que
>> > hacer
>> > la
>> > tarea manualmenete, ingresando los valores en el procedimiento que
> aparece
>> > a
>> > continuacion, el cual primero pasa los productos a una tabla de
> historicos
>> > y
>> > luego hace un cambio para actualizar el producto en la tabla de
> productos
>> > del cliente.
>> > => >> > ALTER PROCEDURE SP_HISTORICOPRODUCTOSVENCIDOS_VENCIDOS
>> > @CODIGO_PRODUCTO NUMERIC (8)
>> > AS
>> > INSERT INTO HISTORICOPRODUCTOS
>> > SELECT * FROM PRODUCTOSCLIENTES WHERE FECHAFINAL <= GETDATE () AND
>> > CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO
>> >
>> > UPDATE PRODUCTOSCLIENTES
>> > SET CODIGOESTADOPRODUCTO = 4
>> > WHERE CODIGOPRDOUCTOCLIENTE = @CODIGO_PRODUCTO
>> >
>> > > >> >
>> > Este procedimiento toma cada uno de los codigos que aparece en la


tabla
>> > uno
>> > (CODIGO_PRODUCTO) y colocar dicho valor en la variable


@CODIGO_PRODUCTO
> ,
>> > y
>> > el procedimiento basado en dicho valor, les debe aplicar las
> instrucciones
>> > que aparecen dentro.
>> >
>> > Es lo que necesito.
>> >
>> > Agradezco si me puden comentar como puedo hacer esto.
>> >
>> > Muchas gracias de antemano
>> >
>> >
>> > ATTT
>> >
>> >
>> > LUCHO
>> >
>> >
>> >
>> > "Salvador Ramos" wrote in


message
>> > news:u5lvOJs$
>> >> Hola,
>> >>
>> >> Te recomiendo que sigas los consejos de Javier. Cuentanos que
>> >> necesitas
>> >> hacer exactamente, e intentaremos darte una solución, y si es


posible
>> > evitar
>> >> el uso de cursores.
>> >>
>> >> Un saludo
>> >> Salvador Ramos
>> >> Murcia - España
>> >>
>> >> [Microsoft MVP SQL Server]
>> >> www.helpdna.net (información sobre SQL Server y .NET)
>> >>
>> >>
>> >> "lucho" escribió en el mensaje
>> >> news:OTP1E2p$
>> >> > Buenos dias Grupo:
>> >> >
>> >> > Tengo la siguiente pregunta:
>> >> >
>> >> >
>> >> > Tengo en una tabla un conjungo de registros como el siguiente:
>> >> >
>> >> > ||
>> >> > ID || CODIGO_PRODUCTO ||
>> >> > == ||
>> >> > 1 || 1244 ||
>> >> > ==> >> >> > 2 || 3366 ||
>> >> > ==> >> >> > 3 || 1566 ||
>> >> > ==> >> >> > 4 || 9932 ||
>> >> > ==> >> >> >
>> >> >
>> >> >
>> >> > Necisito construir un procedimiento almacenado que tome como
> parámetro
>> > el
>> >> > CODIGO_PRODUCTO y ejecute una serie de acciones en otras tablas


(eso
> lo
>> >> > tengo claro).
>> >> >
>> >> > El problema es como puedo hacer para que el procemiento tome uno a
> uno
>> > los
>> >> > registros y los procese ? es necesario utilizar cursores ?
>> >> >
>> >> >
>> >> > Agradezco de antemano su colaboración
>> >> >
>> >> >
>> >> > Atentamente
>> >> >
>> >> >
>> >> >
>> >> > LUCHO
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#8 Javier Loria
10/11/2006 - 16:39 | Informe spam
Hola Lucho:
El siguiente codigo esta escrito con codigo compatible en ambas
plataformas, no va revisado porque no tengo el esquema de las tablas ni los
datos, pero debe darte una idea:
=ÞCLARE @BaseContrato INT
DECLARE @NumContratos TABLE (
ContratoViejo INT NOT NULL PRIMARY KEY
, ContratoNuevo INT NOT NULL
)

BEGIN TRAN
SELECT @BaseContrato=ULTIMONUMERO9
FROM NUMEROSAUTOMATICOS
WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO'

INSERT @NumContratos(ID, ContratoViejo,ContratoNuevo)
SELECT C.CODIGO_CONTRATO
, COUNT(*) + @BaseContrato
FROM Contrato AS C
JOIN Contrato AS D
ON C.CODIGO_CONTRATO>C.CODIGO_CONTRATO
GROUP BY C.CODIGO_CONTRATO

UPDATE NUMEROSAUTOMATICOS
SET ULTIMONUMERO9 = ULTIMONUMERO9 + (SELECT COUNT(*) FROM Contrato)
WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO'

INSERT INTO HISTORICOCONTRATOSMANTENIMIENTO
SELECT <<Columnas>>, 4 AS CodigoEstadoContrato
FROM CONTRATOSMANTENIMIENTO
JOIN Contrato
ON CONTRATOSMANTENIMIENTO.CODIGOCONTRATO = Contrato.CODIGO_CONTRATO

INSERT INTO HISTORICOPRODUCTOSCONTRATOS
SELECT <<Columnas>>
FROM PRODUCTOSCONTRATOS
JOIN Contrato
ON PRODUCTOSCONTRATOS.CODIGOCONTRATO = Contrato.CODIGO_CONTRATO

UPDATE CONTRATOSMANTENIMIENTO
SET CODIGOCONTRATO = N.ContratoNuevo
, FECHAINICIALCONTRATOÚTEADD(YEAR,1,FECHAINICIALCONTRATO)
, FECHAFINALCONTRATO = DATEADD(YEAR,1,FECHAFINALCONTRATO)
, CODIGOESTADOCONTRATO = 0
FROM CONTRATOSMANTENIMIENTO
JOIN @NumContratos AS N
ON CONTRATOSMANTENIMIENTO.CODIGOCONTRATO = N.ContratoViejo

UPDATE PRODUCTOSCONTRATOS
SET CODIGOCONTRATO = N.ContratoNuevo
, FECHAINICIALPRODUCTOCONTRATO =
DATEADD(YEAR,1,FECHAINICIALPRODUCTOCONTRATO)
, FECHAFINALPRODUCTOCONTRATO =
DATEADD(YEAR,1,FECHAFINALPRODUCTOCONTRATO)
JOIN @NumContratos AS N
ON PRODUCTOSCONTRATOS.CODIGOCONTRATO = N.ContratoViejo

UPDATE PRODUCTOSCLIENTES
SET FECHAINICIALVINCULO = DATEADD(YEAR,1,FECHAINICIALVINCULO)
, FECHAFINALVINCULO = DATEADD(YEAR,1,FECHAFINALVINCULO)
, CODIGOVINCULOTIPO = N.ContratoNuevo
, CODIGOESTADOVINCULO = 1
FROM PRODUCTOSCLIENTES
JOIN @NumContratos AS N
ON PRODUCTOSCLIENTES.CODIGOCONTRATO = N.ContratoViejo
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning

"lucho" wrote in message
news:
hola:

Tengo los dos.



"Javier Loria" wrote in message
news:
Hola Lucho:
Una consulta antes de ayudarte, tienes SQL 2000 o 2005, es que hay
algunas mejoras que te podrian ayudar.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"lucho" wrote in message
news:
> Muchas gracias Javier:
>
> La idea tuya es buena, y de hecho la aplico; de pronto te pongo otro


caso:
>
> Tengo la misma Tabla de Contratos:
>
> ||
> ID || CODIGO_CONTRATO||
> == ||
> 1 || 1244 ||
> ==>> > 2 || 3366 ||
> ==>> > 3 || 1566 ||
> ==>> > 4 || 9932 ||
> ==>> >
> ahora tengo un procedimiento almacenado que renueva cada contrato,
> corriendo
> el procedimiento de manera manual, metiendo uno a uno estos valores:
>
> =>> > ALTER PROCEDURE SP_HISTORICOCONTRATOS_RENOVACION
> @CONTRATO NUMERIC (8)
> AS
>
> DECLARE @NUEVOCONTRATO NUMERIC (8)
>
> UPDATE NUMEROSAUTOMATICOS
> SET ULTIMONUMERO9 = ULTIMONUMERO9 + 1
> WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO'
>
> contrato
> SET @NUEVOCONTRATO = (SELECT ULTIMONUMERO9 FROM NUMEROSAUTOMATICOS
> WHERE IDENTIFICACIONNUMERADOR = 'CODIGOCONTRATO')
>
> INSERT INTO HISTORICOCONTRATOSMANTENIMIENTO
> SELECT * FROM CONTRATOSMANTENIMIENTO WHERE CODIGOCONTRATO = @CONTRATO
>
> INSERT INTO HISTORICOPRODUCTOSCONTRATOS
> SELECT * FROM PRODUCTOSCONTRATOS WHERE CODIGOCONTRATO = @CONTRATO
>
> UPDATE HISTORICOCONTRATOSMANTENIMIENTO
> SET CODIGOESTADOCONTRATO = 4 --ESTADO TERMINADO
> WHERE CODIGOCONTRATO = @CONTRATO
>
> UPDATE CONTRATOSMANTENIMIENTO
> SET CODIGOCONTRATO = @NUEVOCONTRATO
> WHERE CODIGOCONTRATO = @CONTRATO
> UPDATE CONTRATOSMANTENIMIENTO
> SET FECHAINICIALCONTRATO = DATEADD(YEAR,1,FECHAINICIALCONTRATO),
> FECHAFINALCONTRATO = DATEADD(YEAR,1,FECHAFINALCONTRATO),
> CODIGOESTADOCONTRATO = 0
> WHERE CODIGOCONTRATO = @NUEVOCONTRATO
>


contrato,
> con el nuevo número
> UPDATE PRODUCTOSCONTRATOS
> SET CODIGOCONTRATO = @NUEVOCONTRATO
> WHERE CODIGOCONTRATO = @CONTRATO
> UPDATE PRODUCTOSCONTRATOS
> SET FECHAINICIALPRODUCTOCONTRATO >> > DATEADD(YEAR,1,FECHAINICIALPRODUCTOCONTRATO),
> FECHAFINALPRODUCTOCONTRATO


>> > DATEADD(YEAR,1,FECHAFINALPRODUCTOCONTRATO)
> WHERE CODIGOCONTRATO = @NUEVOCONTRATO
>
> contrato


y
> su vigencia
> UPDATE PRODUCTOSCLIENTES
> SET FECHAINICIALVINCULO = DATEADD(YEAR,1,FECHAINICIALVINCULO),
> FECHAFINALVINCULO = DATEADD(YEAR,1,FECHAFINALVINCULO),
> CODIGOVINCULOTIPO


>> > @NUEVOCONTRATO, CODIGOESTADOVINCULO = 1
> WHERE CODIGOVINCULOTIPO = @CONTRATO
> >> >
> Como veras es un poquito grande.
>
> Ahora, lo que necesito es que la variable @CONTRATO tome cada uno de
> los
> registros de la primera tabla y corra ( con este procedimiento renuevo


un
> contrato de un cliente ); al final me debe generar 4 contratos.
>
> El procedimiento funciona bien, pero me falta la parte de tomar cada
> registro y realizar el proceso.
>
>
> Este caso de pronto debí enviarlo desde el principio, motivo por el
> cual
> pido disculpas; es un ejemplo mas exacto de lo que necesito.
>
> Javier nuevamente Agradezco tu colaboración
>
>
> ATTT
>
>
> LUCHO
>
>
> "Javier Loria" wrote in message
> news:%23ef43h2$
>> Hola Lucho:
>> Que tal algo como esto:
>> =>> >> BEGIN TRAN
>> INSERT INTO HISTORICOPRODUCTOS
>> SELECT PRODUCTOSCLIENTES.* -- Seria mejor detallas las columnas
>> FROM PRODUCTOSCLIENTES
>> JOIN TablaProcedimiento
>> ON
>> PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO
>> WHERE FECHAFINAL <= GETDATE ()
>> AND CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO
>>
>> UPDATE PRODUCTOSCLIENTES
>> SET CODIGOESTADOPRODUCTO = 4
>> FROM PRODUCTOSCLIENTES
>> JOIN TablaProcedimiento
>> ON
>> PRODUCTOSCLIENTES.CODIGO_PRODUCTO=TablaProcedimiento.CODIGO_PRODUCTO
>>
>> COMMIT TRAN
>> ==>> >> Saludos,
>>
>> Javier Loria
>> Costa Rica-MVP
>> Solid Quality Learning
>> "lucho" wrote in message
>> news:um5uhW1$
>> > Hola:
>> >
>> >
>> > Muchas gracias a los dos por su interes. Les cuento lo que necesito
> hacer:
>> >
>> > Tengo la tabla que les envie con anterioridad:
>> >
>> > ||
>> > ID || CODIGO_PRODUCTO ||
>> > == ||
>> > 1 || 1244 ||
>> > ==>> >> > 2 || 3366 ||
>> > ==>> >> > 3 || 1566 ||
>> > ==>> >> > 4 || 9932 ||
>> > ==>> >> >
>> > Esta tabla aparece cada dia, dado que hay un procedimiento
>> > almacenado
>> > programado que corre todos los dias a las 12 am, y me muestra en


este
>> > listado el codigo de los productos que vencen garantias.
>> >
>> > Dado que la aplicacion que tengo es bastante inflexible, tengo que
>> > hacer
>> > la
>> > tarea manualmenete, ingresando los valores en el procedimiento que
> aparece
>> > a
>> > continuacion, el cual primero pasa los productos a una tabla de
> historicos
>> > y
>> > luego hace un cambio para actualizar el producto en la tabla de
> productos
>> > del cliente.
>> > =>> >> > ALTER PROCEDURE SP_HISTORICOPRODUCTOSVENCIDOS_VENCIDOS
>> > @CODIGO_PRODUCTO NUMERIC (8)
>> > AS
>> > INSERT INTO HISTORICOPRODUCTOS
>> > SELECT * FROM PRODUCTOSCLIENTES WHERE FECHAFINAL <= GETDATE () AND
>> > CODIGOPRODUCTOCLIENTE = @CODIGO_PRODUCTO
>> >
>> > UPDATE PRODUCTOSCLIENTES
>> > SET CODIGOESTADOPRODUCTO = 4
>> > WHERE CODIGOPRDOUCTOCLIENTE = @CODIGO_PRODUCTO
>> >
>> > >> >> >
>> > Este procedimiento toma cada uno de los codigos que aparece en la


tabla
>> > uno
>> > (CODIGO_PRODUCTO) y colocar dicho valor en la variable


@CODIGO_PRODUCTO
> ,
>> > y
>> > el procedimiento basado en dicho valor, les debe aplicar las
> instrucciones
>> > que aparecen dentro.
>> >
>> > Es lo que necesito.
>> >
>> > Agradezco si me puden comentar como puedo hacer esto.
>> >
>> > Muchas gracias de antemano
>> >
>> >
>> > ATTT
>> >
>> >
>> > LUCHO
>> >
>> >
>> >
>> > "Salvador Ramos" wrote in


message
>> > news:u5lvOJs$
>> >> Hola,
>> >>
>> >> Te recomiendo que sigas los consejos de Javier. Cuentanos que
>> >> necesitas
>> >> hacer exactamente, e intentaremos darte una solución, y si es


posible
>> > evitar
>> >> el uso de cursores.
>> >>
>> >> Un saludo
>> >> Salvador Ramos
>> >> Murcia - España
>> >>
>> >> [Microsoft MVP SQL Server]
>> >> www.helpdna.net (información sobre SQL Server y .NET)
>> >>
>> >>
>> >> "lucho" escribió en el mensaje
>> >> news:OTP1E2p$
>> >> > Buenos dias Grupo:
>> >> >
>> >> > Tengo la siguiente pregunta:
>> >> >
>> >> >
>> >> > Tengo en una tabla un conjungo de registros como el siguiente:
>> >> >
>> >> > ||
>> >> > ID || CODIGO_PRODUCTO ||
>> >> > == ||
>> >> > 1 || 1244 ||
>> >> > ==>> >> >> > 2 || 3366 ||
>> >> > ==>> >> >> > 3 || 1566 ||
>> >> > ==>> >> >> > 4 || 9932 ||
>> >> > ==>> >> >> >
>> >> >
>> >> >
>> >> > Necisito construir un procedimiento almacenado que tome como
> parámetro
>> > el
>> >> > CODIGO_PRODUCTO y ejecute una serie de acciones en otras tablas


(eso
> lo
>> >> > tengo claro).
>> >> >
>> >> > El problema es como puedo hacer para que el procemiento tome uno
>> >> > a
> uno
>> > los
>> >> > registros y los procese ? es necesario utilizar cursores ?
>> >> >
>> >> >
>> >> > Agradezco de antemano su colaboración
>> >> >
>> >> >
>> >> > Atentamente
>> >> >
>> >> >
>> >> >
>> >> > LUCHO
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>






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