Triggers

09/06/2005 - 18:09 por SergioT | Informe spam
Hola
Haber si me pueden ayudar

Necesito un triger que me actualize a un valor en una tabla cuando es
cambiado otra valor en otra tabla se puede???

La idea es esta:
Tengo una tabla en la cual esta el precio de compra de los items COMPRA(
Nro, Item, Cantidad,Valor) donde valor es el valor total de compra osea
cantidad * precio Unitario
Tengo una segunda tabla MOV_STOCK(Documento, Item,Cant, costototal,...)
donde costoTotal es igual que antes Cant*PrecioUnitario, no almaceno los
precios unitarios solo los valores totales, por que a veces los decimales
producen diferencias.

La idea es que si alguien me cambia el precio de un compra en la tabla
COMPRA, este nuevo precio se pase automaticamente a los registros de la
tabla MOV_STOCK a todos los items afectados por el cambio de forma que
siempre tenga este valor actualizado, ya se que es redundancia pero ... a
veces es mejor para agilizar reportes y consultas frecuentes cierto?

Pueden haber n registros para un item en la tabla de Mov_Stock pero solo hay
uno en la de COMPRA

Gracias por la ayuda
Sergio
 

Leer las respuestas

#1 Don Roque
09/06/2005 - 23:24 | Informe spam
Hola,

La primer ayuda que puedo darte es que en estos casos, deberias
escribir "a ver" y no HABER :D

La segunda... no conozco la logica de tu sistema, pero si vos modificas
movimientos de stock viejos, vas a estar generando informacion
incorrecta. Supone esta situacion

Compro 10 pares de zapatos a 5 pesos cada uno
vendo 3 pares (30 pesos)
Modifico el precio de los zapatos a 8 pesos cada par

Si se dispara el trigger, vas a estar mostrando que hubo un movimiento
de stock por 24 pesos, cuando en realidad, el movimiento fue de 15
(ojo, tal vez estoy opinando mal porque no conozco la logica de tu
sistema ;))

Ahora si, vamos a lo que necesitas:



create table articulos(
artid int primary key,
artnom varchar(20) not null,
precio numeric(5,2) not null
)
go

create table movimientos
(
artid int,
cant int,
monto numeric (7,2)
)

go

insert into articulos values (1, 'zapatos', 10)
insert into articulos values (2, 'remeras', 5)
insert into articulos values (3, 'pantalones', 12)

insert into movimientos values (1, 2, 20)
insert into movimientos values (1, 3, 30)

insert into movimientos values (2, 2, 10)
insert into movimientos values (2, 3, 15)

insert into movimientos values (3, 2, 24)
insert into movimientos values (3, 3, 36)


go

create trigger trg_enupdatedearticulos
on articulos
for update
as



if update(precio)
begin

update movimientos
set monto = m.cant * i.precio
from movimientos m, inserted i
where m.artid = i.artid

end


select * from articulos
select * from movimientos





drop trigger trg_enupdatedearticulos
drop table articulos
drop table movimientos

Preguntas similares