Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Actualizar una Tabla e Insertar Registro en otra...

Estas en el tema de Actualizar una Tabla e Insertar Registro en otra... en el foro de SQL Server en Foros del Web. Buenas a todos los integrantes de foros del web a ver quien sabe como puedo hacerlo queria hacerlo con un procedimiento almacenado resulta que tengo ...
  #1 (permalink)  
Antiguo 23/03/2010, 17:52
 
Fecha de Ingreso: agosto-2008
Mensajes: 142
Antigüedad: 15 años, 8 meses
Puntos: 2
Actualizar una Tabla e Insertar Registro en otra...

Buenas a todos los integrantes de foros del web

a ver quien sabe como puedo hacerlo
queria hacerlo con un procedimiento almacenado

resulta que tengo algo asi:
Actualizo una tabla mediante un procedimiento "CifrasAct"

UPDATE Deudores Resta=Resta-@UltPag, numPag=NumPag+1, UltPag=@UltPag,
FechaUltPag=@FechaUltPag

este procedimiento me funciona perfectamente pero ahora me piden que lleve un historial de pagos
Por lo que hice una tabla "PagosRea" con los siguientes campos
Id
IdDeudor
UltPag ----------->esta es la cantidad abonada
FechaUltPag------>La fecha en que se realizo el pago

el id es Identity

en esencia tengo la misma información y lo que quiero es que al momento de actualizar mi tabla de deudores me inserte un nuevo registro con la información generada

gracias
  #2 (permalink)  
Antiguo 23/03/2010, 18:58
Avatar de otreblanc  
Fecha de Ingreso: mayo-2005
Ubicación: Chiapas, la última frontera...
Mensajes: 73
Antigüedad: 19 años
Puntos: 0
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

Tu IDEA es correcta: creas el procedimiento almacenado, al que le enviás los parámetros de cada pago; y lo ejecutas dentro de una transacción: algo así:

create procedure sp_aplicarPago parametro1, parametro2,...
begin

BEGIN TRY
BEGIN TRANSACTION


--actualizacion
UPDATE ...

--insercion
INSERT ...

COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK

DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()

RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH

end
  #3 (permalink)  
Antiguo 23/03/2010, 19:26
Avatar de Valery-Net  
Fecha de Ingreso: agosto-2008
Mensajes: 694
Antigüedad: 15 años, 8 meses
Puntos: 12
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

Uso un código igual igual al de otreblanc
  #4 (permalink)  
Antiguo 25/03/2010, 19:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 142
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

Gracias, lo estaba implementando mas o menos como describes, me mandaba error
por tipo de datos...
pero ya funciona al 100 gracias por la ayuda
  #5 (permalink)  
Antiguo 26/03/2010, 20:43
 
Fecha de Ingreso: enero-2010
Ubicación: SJM Lima - Peru
Mensajes: 55
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

Cita:
Iniciado por Valery-Net Ver Mensaje
Uso un código igual igual al de otreblanc
Hola
Por que mejor no trabajas con disparadores o desencadenadores.

el concepto de un disparador es que se active cada vez que se realize un movimiento o accion en una tabla ya sea INSERT, UPDATE y DELETE.


y en tu caso como ya inserta y casi los mismos valores van a otra tabla crea un tigger

Código SQL:
Ver original
  1. CREATE TRIGGER trigger_name
  2. ON { TABLE | VIEW }
  3. [ WITH ENCRYPTION ]
  4. {
  5.     { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
  6.         [ WITH APPEND ]
  7.         [ NOT FOR REPLICATION ]
  8.         AS
  9.         [ { IF UPDATE ( COLUMN )
  10.             [ { AND | OR } UPDATE ( COLUMN ) ]
  11.                 [ ...n ]
  12.         | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
  13.                 { comparison_operator } column_bitmask [ ...n ]
  14.         } ]
  15.         sql_statement [ ...n ]
  16.     }
  17. }
tendria 2 tablas

Código SQL:
Ver original
  1. CREATE TABLE pagos (id INT, Cliente VARCHAR(20),pago NUMERIC(20), Dia INT, mes INT, periodo INT)
  2. GO
  3. CREATE TABLE historico (idhis INT IDENTITY(1,1), cliente VARCHAR(20), fecha datetime)

Código SQL:
Ver original
  1. CREATE TRIGGER spHis
  2.     ON Pagos
  3.     FOR INSERT
  4. AS
  5.     BEGIN
  6.     INSERT INTO historico SELECT cliente,getdate() FROM inserted
  7.     END

Código SQL:
Ver original
  1. INSERT INTO pagos VALUES(1,'Jhon Bautista',1000,1,10,2008 )

Código SQL:
Ver original
  1. SELECT * FROM pagos
  2. SELECT * FROM historico
revisa los select en ambas tablas para ver como funciono y se te agrada aplicalo asi usarias la potencia de sql server y no solo quedarte con una simple base datos
sino como un potente gestor de base de datos que maneja tablas, indices, procedimientos almacenados, funciones, default, reglas, tipos de datos defindidos por el usuario y muchas mas ventajas que ofrece el sql .


www.bitxense.com.pe | Soluciones Informaticas S.A.C. - [email protected]
Cualquier duda soy Jhon Bautista Palomino aqui esta mi correo MSN [email protected] Lima-Peru
  #6 (permalink)  
Antiguo 27/03/2010, 10:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

No estoy de acuerdo con la propuesta, los TRIGGER's en su momento (ya no tienen ese objetivo), fue conservar la DRI, hoy se hacen con constrains.

Me voy con la propuesta de Otreblanc, es mejor tener el control dentro de un procedimiento
  #7 (permalink)  
Antiguo 29/03/2010, 16:08
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Actualizar una Tabla e Insertar Registro en otra...

De acuerdo con IISLAS, a mi en l personal me purga ver una BD con Triggers...

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....

Etiquetas: registro, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:31.