Creare un trigger sql server ed inserire un valore proveniente dalla tabella aggiornata

di ridaria il
5 risposte
Ciao ragazzi dovrei creare un trigger che all'evento update di una tabella (tabellaUpdated)

esegue una insert in una tabella ed in questa deve inserire l'ID della tabella appena UPDATATA (tabellaUpdated)

ESEMPIO:

CREATE TRIGGER trg_tableUpdated
ON tableUpdated
AFTER UPDATE
AS
IF ( UPDATE (Pagata) )
BEGIN
INSERT INTO Log_Query_Su_Articoli ([data], ora, idDocumento, identOperatoreBanco, idarticolo, qta, operazione) values (GETDATE(),CAST(GETDATE() AS TIME), "idarticolo",0, 0, 0, 'Text_string')

END;

ECCO: il mio problema è che nel campo: idarticolo devo inserire l'id del record appena UPDATATO nella tabella: tabellaUpdated

sono stato chiaro? spero di si

In attesa RINGRAZIO

5 Risposte

  • Hai provato la ?
    INSERT INTO Log_Query_Su_Articoli ([data], ora, idDocumento, identOperatoreBanco, idarticolo, qta, operazione)
    VALUES (GETDATE(),CAST(GETDATE() AS TIME), @@IDENTITY, 0, 0, 0, 'Text_string')
    Corbelleria mia, pardon, mi ero perso il discorso UPDATE...
  • Salve,
    no, @@Identity NON va bene, in quanto parli di UPDATE e non INSERT... utilizzeresti un @@Identity NON riferito al contesto corrente e sarebbe molto sbagliato...

    devi utilizzare la tabella virtuale INSERTED, che contiene le modifiche apportate...
    qualche cosa quindi simile a
    
    CREATE TRIGGER trg_tableUpdated
    	ON tableUpdated AFTER UPDATE
    AS
    	IF (@@ROWCOUNT = 0) BEGIN
    		RETURN;
    		END;
    
    	IF ( UPDATE (Pagata) ) BEGIN
    		INSERT INTO dbo.Log_Query_Su_Articoli ([data], ora, idDocumento, identOperatoreBanco, idarticolo, qta, operazione) 
    			SELECT GETDATE(),CAST(GETDATE() AS TIME)
    				, i.Id -- id appena aggiornato
    				,0, 0, 0, 'Text_string'
    				FROM inserted i;
    		END;
    GO
    
    dove con una tabella fittizia iniziale definita come
    
     .... dbo.tableUpdated ( 
    	Id int,
    	Dato varchar(1),
    	Pagata int
    	);
    
    puoi verificare
    
    GO
    INSERT dbo.tableUpdated
    	VALUES ( 1, 'a', 1 ), ( 2, 'b', 1 );
    
    PRINT 'nessun inserimento';
    SELECT * 
    	FROM dbo.Log_Query_Su_Articoli;
    
    ----------
    PRINT 'update senza modifica Pagata: nessun inserimento';
    UPDATE dbo.tableUpdated
    	SET Dato = Dato
    	WHERE Id <> 0;
    
    SELECT * 
    	FROM dbo.Log_Query_Su_Articoli;
    ----------
    
    PRINT 'update modifica Pagata id 1: 1 riga inserita';
    UPDATE dbo.tableUpdated
    	SET Pagata = 2
    	WHERE Id = 1;
    
    SELECT * 
    	FROM dbo.Log_Query_Su_Articoli;
    ----------
    PRINT 'update modifica Pagata a tutti: 2 righe inserite';
    UPDATE dbo.tableUpdated
    	SET Pagata = 2
    	WHERE Id <> 0;
    
    SELECT * 
    	FROM dbo.Log_Query_Su_Articoli;
    --<------------------
    nessun inserimento
    Data                    Ora                     IdDocumento identOperatoreBanco idarticolo  qta                                     Operazione
    ----------------------- ----------------------- ----------- ------------------- ----------- --------------------------------------- --------------------
    
    update senza modifica Pagata: nessun inserimento
    Data                    Ora                     IdDocumento identOperatoreBanco idarticolo  qta                                     Operazione
    ----------------------- ----------------------- ----------- ------------------- ----------- --------------------------------------- --------------------
    
    update modifica Pagata id 1: 1 riga inserita
    Data                    Ora                     IdDocumento identOperatoreBanco idarticolo  qta                                     Operazione
    ----------------------- ----------------------- ----------- ------------------- ----------- --------------------------------------- --------------------
    2022-10-28 19:17:38.073 1900-01-01 19:17:38.073 1           0                   0           0.0000                                  Text_string
    
    update modifica Pagata a tutti: 2 righe inserite
    Data                    Ora                     IdDocumento identOperatoreBanco idarticolo  qta                                     Operazione
    ----------------------- ----------------------- ----------- ------------------- ----------- --------------------------------------- --------------------
    2022-10-28 19:17:38.073 1900-01-01 19:17:38.073 1           0                   0           0.0000                                  Text_string
    2022-10-28 19:17:38.073 1900-01-01 19:17:38.073 2           0                   0           0.0000                                  Text_string
    2022-10-28 19:17:38.073 1900-01-01 19:17:38.073 1           0                   0           0.0000                                  Text_string
    
    
    salutoni romagnoli
    --
    Andrea
  • Grazie per l'attenzione,

    ma potresti essere piu chiaro?

    Non ci ho capito proprio NIENTE

    Grazie
  • Salve,
    se ti riferisci al mio post, cosa devo spiegare, il codice del trigger o cosa?
    cosi' almeno so da dove partire

    salutoni romagnoli
    --
    Andrea
Devi accedere o registrarti per scrivere nel forum
5 risposte