none
Trigger update current Record RRS feed

  • Domanda

  • Salve, sto cercando senza esito purtroppo di far funzionare un trigger in modo da aggiornare il valore di un campo in modo da dicriminare i record modificati/inseriti ogni giorno. potete darmi dei consigli per far funzionare quanto sotto?:

    AFTER UPDATE
    AS

    UPDATE TBLGEM
        SET TS = GETDATE()
        FROM TBLGEM INNER JOIN inserted ON TBLGEM .key= Inserted.key

    Grazie mille!!


    Marco

    lunedì 21 marzo 2022 16:59

Risposte

  • Se la ricorsione dei trigger è attiva allora devi introdurre un test di blocco e lo dovresti mettere sugli eventuali altri trigger della tabella.


    AFTER INSERT, UPDATE
    AS
    
    if TRIGGER_NESTLEVEL(OBJECT_ID('myTriggerName'), 'AFTER','DML')>1 return;
    
    UPDATE TBLGEM
        SET TS = GETDATE()
        FROM TBLGEM INNER JOIN inserted ON TBLGEM .key= Inserted.key

    G.

    martedì 22 marzo 2022 08:54

Tutte le risposte

  • Ciao,

    il trigger che riporti funziona solo nel caso UPDATE: per farlo eseguire anche sulle INSERT devi dichiararlo così:

    AFTER INSERT, UPDATE
    AS

    Giorgio

    martedì 22 marzo 2022 07:56
  • Grazie Giorgio, avevo già provato a dichiararlo così.. l'errore però nel mio caso è che mi viene restituito un errore:

    e non ne capisco il motivo..


    Marco

    martedì 22 marzo 2022 08:04
  • Ho capito che il mio problema è la ricorsione diretta... il trigger difatti parte all'aggiornamento del record..... in seguito lui aggiorna il valore datetime di un campo del record stesso che lo fà ripartire.

    E' una cosa risolvibile?.. ho letto che si può disattivare a livello di istanza la ricorsione diretta dei trigger... ma non vorrei metter mano ad un parametro che potrebbe inficiare il funzionamento di altri trigger...

    Ho anche pensato di utilizzare una tabella esterna dove salvare la chiave della tabella ed il valore datetime... a parer vostro è l'unica strada percorribile?

    Suggerimenti?...


    Marco

    martedì 22 marzo 2022 08:20
  • Se la ricorsione dei trigger è attiva allora devi introdurre un test di blocco e lo dovresti mettere sugli eventuali altri trigger della tabella.


    AFTER INSERT, UPDATE
    AS
    
    if TRIGGER_NESTLEVEL(OBJECT_ID('myTriggerName'), 'AFTER','DML')>1 return;
    
    UPDATE TBLGEM
        SET TS = GETDATE()
        FROM TBLGEM INNER JOIN inserted ON TBLGEM .key= Inserted.key

    G.

    martedì 22 marzo 2022 08:54
  • Grazie mille, con il tuo suggerimento ho risollto. Grazie mille

    Marco

    martedì 22 marzo 2022 09:10