Trigger per l'aggiornamento

giovedì 29 giugno 2006 - 00.26

squilibrio Profilo | Expert

Ciao, ho provato a scrivere un trigger che in seguito all'inserimento di un record in una tabella deve calcolare il costo medio in funzione di due elementi (quantita progressiva - costo medio) già presenti in un altra tabella... quello che vorrei capire è come strutturare correttamente il mio trigger che forse fa un po schifo scritto cosi


CREATE TRIGGER [dbo].[tr_AggiornamentoCostoMedio]

ON [dbo].[Tabella]

FOR UPDATE,INSERT

-- ogni volta che viene modificato o aggiunto un elemento

AS

BEGIN

-- Trigger da eseguire solo se il tipo del records è AA
IF EXISTS(SELECT 1 FROM inserted WHERE Tipo= 'AA')
DECLARE @IDElemento int
DECLARE @Qta int
DECLARE @Prezzo decimal

-- Mi servono queste tre variabili (recuperate dal record modificato/inserito) per aggiornare il valore medio presente in una seconda tabella di appoggio
SELECT @IDElemento = ID FROM inserted WHERE Tipo= 'AA'
SELECT @Qta = Qta FROM inserted WHERE Tipo= 'AA'
SELECT @Prezzo = Prezzo FROM inserted WHERE Tipo= 'AA'


Allora partendo dal presupposto che nella mia Tabella2 ho, per ogni IDElemento, QtaCostoMedio e CostoMedio, questi due elementi "di appoggio" mi servono per calcolare il nuovo costo medio in funzione del record inserito/modificato, quindi:

BEGIN

-- Nella Tabella2 ho già un costo medio (che il risultato di una somma progressiva di quantità QtaCostoMedio), io devo calcolare il nuovo costo in funzione dei due valori (@Prezzo,@Qta) recuperati dal record corrente

UPDATE Tabella2
SET CostoMedio = ((CostoMedio * QtaCostoMedio) + (@Prezzo * @Qta)) / (QtaCostoMedio + @Qta)
where ID = @IDElemento

-- Aggiorno la quantità progressiva che ha generato il valore medio e che mi servirà per calcolare il prossimo valore (in funzione della prossima quantità)... spero che il mio ragionamento sia corretto
UPDATE Tabella2
SET QtaCostoMedio = QtaCostoMedio + @Qta
where ID = @IDArticolo


END

END


Non credo proprio che questo trigger sia corretto, ma almeno ci ho provato!!! Cosa devo modificare? Scusate per la lunghezza del post ma volevo essere il piu chiaro possibile!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5