Problema con actualización

Hola Señor Jordim. Tengo un gran problema con un trigger. Resulta que tengo dos tablas que se relacionan: Una tiene los presupuestos mensuales (TblCCostoPtoMes) y otra tiene los presupuestos anuales (TblCCostoPto). Quiero que cuando se agregue un presupuesto al año (por ejemplo, agrego el registro de abril de 2001 con su respectivo valor) automáticamente se sume al presupuesto total de ese año (en la otra tabla). Este es un código del trigger:
Alter Trigger TrActPtoAgno
On dbo.TblCCostoPtoMes
For Insert,update
As
declare @IntCCostoPtoId as Int, @CurCCostoPtoPdo as money, @CurCCostoPtoPdoViejo as money
Select @CurCCostoPtoPdo=CurCCostoPtoPdo
from inserted
Select @IntCCostoPtoId=IntCCostoPtoId
from inserted
Select @CurCCostoPtoPdoViejo=CurCCostoPtoPdo
from deleted
if @CurCCostoPtoPdoViejo=NULL
begin
select @CurCCostoPtoPdoViejo=0
end
If update (CurCCostoPtoPdo)
begin
update TblCCostoPto
set CurCCostoPtoPdo = CurCCostoPtoPdo - @CurCCostoPtoPdoViejo + @CurCCostoPtoPdo
where (IdsCCostoPtoId = @IntCCostoPtoId)
end
else
update TblCCostoPto
set CurCCostoPtoPdo = CurCCostoPtoPdo + @CurCCostoPtoPdo
where (IdsCCostoPtoId = @IntCCostoPtoId)
Utilizo la variable @CurCCostoPtoPdoViejo para recalcular el total cuando hago una actualización, pero si hago una inserción, esa variable hace que el cálculo se convierta en un valor NULL y no me haga la actualización en el respectivo campo (En la tabla TblCCostoPto). Si arreglo esto, entonces se me daña lo otro. ¿Qué puedo hacer para que pueda insertar y actualizar sin ningún problema? Le agradezco por su respuesta pronta. Hasta pronto
Oscar Niño
1

1 respuesta

Respuesta
Este trigger te debería funcionar bien. De todos modos yo cambiaría un par de cosas:
Alter Trigger modifica un trigger ya echo y no se si esto es muy necesario. Crea el trigger una vez y punto. ¿Utilizas el Manager del SQL? Si lo utilizas tienes un editor de triggers
En la comprobacion a null de @CurCCostoPtoPdoViejo en vez de hacer select @CurCCostoPtoPdoViejo=0 haz set @CurCCostoPtoPdoViejo=0 que es lo mismo pero mas rapido que el select
Yo creo que haciendo estos cambios te debería andar bien de todos modos no lo he probado

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas