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

di il
5 risposte

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

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

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

    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...
  • Re: Creare un trigger sql server ed inserire un valore proveniente dalla tabella aggiornata

    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
  • Re: Creare un trigger sql server ed inserire un valore proveniente dalla tabella aggiornata

    Grazie per l'attenzione,

    ma potresti essere piu chiaro?

    Non ci ho capito proprio NIENTE

    Grazie
  • Re: Creare un trigger sql server ed inserire un valore proveniente dalla tabella aggiornata

    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
  • Re: Creare un trigger sql server ed inserire un valore proveniente dalla tabella aggiornata

    ridaria ha scritto:


    ....
    Non ci ho capito proprio NIENTE
    ...
    ciao,
    qui ed anche in altri siti puoi trovare spiegazioni

    https://learn.microsoft.com/it-it/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables?view=sql-server-ver16

    HTH
Devi accedere o registrarti per scrivere nel forum
5 risposte