Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Trigger per l'aggiornamento
giovedì 29 giugno 2006 - 00.26
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
gio 29 giu 2006 - 00:26
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!
Torna su
Stanze Forum
Elenco Threads
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 !