ciao a tutti,
io avrei bisogno di lanciare un trigger all'inserimento di un blocco di row e non all'inserimento della singola... esiste un modo semplice di farlo?
vi spiego la mia situazione, io da una pagina aspx seleziono n elementi e li inserisco in una tabella, volevo che venisse lanciato un trigger e che questo a sua volta lanciasse un job per controllare l'eventuale cambio di stato (di una di queste row). Mi serve per gestire le notifiche di paypal sullo stato dei pagamenti, il job potrebbe non partire x giorni, per questo non voglio schedularlo a cadenza dissa e dovrà qualora siano presenti dati in tabella continuare a controllare lo stato.... esiste una soluzione facile al mio problema?
dimenticavo sto utilizzando SQL Server 2005 e Linq come Data Access.

Grazie ciao

Paolo
1.976 messaggi dal 27 luglio 2005
Contributi
salve Paolo,
advapi wrote:
ciao a tutti,
io avrei bisogno di lanciare un trigger all'inserimento di un blocco di row e non all'inserimento della singola... esiste un modo semplice di farlo? vi spiego la mia situazione, io da una pagina aspx seleziono n elementi e li inserisco in una tabella, volevo che venisse lanciato un trigger e che questo a sua volta lanciasse un job per controllare l'eventuale cambio di stato (di una di queste row). Mi serve per gestire le notifiche di paypal sullo stato dei pagamenti, il job potrebbe non partire x giorni, per questo non voglio schedularlo a cadenza dissa e dovrà qualora siano presenti dati in tabella continuare a controllare lo stato.... esiste una soluzione facile al mio problema?
dimenticavo sto utilizzando SQL Server 2005 e Linq come Data Access.

lo scatenarsi dei trigger e' sempre "per batch" e non "per singola riga".. se tu ad esempio scrivi
INSERT INTO .. VALUES (...);
INSERT INTO .. VALUES (...);
hai 2 batches e quindi il trigger viene scatenato 2 volte..
se invece scrivi
INSERT INTO ... SELECT .. FROM altraTabella;
e la proiezione restituisce n righe, il trigger viene scatenato una sola volta...

la cosa e' verificabile nella tabella virtuale INSERTED disponibile durante l'esecuzione del trigger..
nel primo caso, inserted conterra' una singola riga, nel secondo caso, invece, conterra' tutte le n righe proiettate da SELECT ... FROM altraTabella...

personalmente non mi piace molto la chiamata in causa di un job, in questi termini.. un trigger, per definizione, deve processare quanto dovuto nel piu' breve tempo possibile ed uscire, consentendo ovvero annullando le modifiche apportate.. niente di piu', niente di meno.. lo start di un job (sp_start_jo e' una chiamata sincrona e, a seconda della complicatezza del processo stesso, potrebbe anche richiedere parecchio tempo.. in questa situazione la transazione originaria resta "appesa" in attesa del termine del processo.. preferirei di gran lunga pianificare opportunamente il processo stesso..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.