Come posso eseguire un trigger PRIMA AGGIORNATO con SQL Server?

Sto usando Sqlserver Express e non posso farlo before updated trigger before updated . C’è un altro modo per farlo?

MSSQL non supporta i trigger BEFORE . Il più vicino che hai è INSTEAD OF ma il loro comportamento è diverso da quello dei trigger BEFORE in MySQL.

Puoi saperne di più su di loro qui , e nota che INSTEAD OF trigger “Specifica che il trigger viene eseguito al posto dell’istruzione SQL di triggerszione, ignorando così le azioni delle istruzioni di triggerszione.” Pertanto, le azioni sull’aggiornamento potrebbero non aver luogo se il trigger non è scritto / gestito correttamente. Sono interessate anche le azioni in cascata.

Puoi invece preferire un approccio diverso a quello che stai cercando di ottenere.

È vero che non ci sono “trigger precedenti” in MSSQL. Tuttavia, è ansible tenere traccia delle modifiche apportate al tavolo, utilizzando contemporaneamente le tabelle “inserted” e “deleted”. Quando un aggiornamento causa l’triggerszione del trigger, la tabella “inserted” memorizza i nuovi valori e la tabella “deleted” memorizza i vecchi valori. Una volta ottenute queste informazioni, è ansible simulare in modo relativamente semplice il comportamento “prima dell’triggerszione”.

T-SQL supporta solo trigger AFTER e INSTEAD OF, non ha un trigger BEFORE, come riscontrato in alcuni altri RDBMS.

Credo che vorrete usare un trigger INSTEAD OF.

Non si può essere sicuri che ciò si applichi a SQL Server Express , ma è comunque ansible accedere ai dati “precedenti” anche se il trigger si verifica dopo l’aggiornamento. È necessario leggere i dati dalla tabella eliminata o inserita che viene creata al volo quando la tabella viene modificata. Questo è essenzialmente ciò che dice @Stamen, ma avevo ancora bisogno di esplorare ulteriormente per capire che (utile!) Risposta.

La tabella eliminata memorizza le copie delle righe interessate durante le istruzioni DELETE e UPDATE. Durante l’esecuzione di un’istruzione DELETE o UPDATE, le righe vengono eliminate dalla tabella di trigger e trasferite alla tabella eliminata …

La tabella inserita memorizza le copie delle righe interessate durante le istruzioni INSERT e UPDATE. Durante una transazione di inserimento o aggiornamento, nuove righe vengono aggiunte sia alla tabella inserita che alla tabella di trigger …

https://msdn.microsoft.com/en-us/library/ms191300.aspx

Quindi puoi creare il tuo trigger per leggere i dati da una di queste tabelle, ad es

 CREATE TRIGGER  ON  AFTER UPDATE AS BEGIN INSERT INTO  ( , DateChanged ) SELECT , getdate() FROM deleted; END; 

Il mio esempio è basato su quello qui:

http://www.seemoredata.com/en/showthread.php?134-Example-of-BEFORE-UPDATE-trigger-in-Sql-Server-good-for-Type-2-dimension-table-updates

trigger SQL Server

Tutti i trigger “normali” in SQL Server sono trigger “AFTER …”. Non ci sono trigger “PRIMA …”.

Per fare qualcosa prima di un aggiornamento, controlla INSTEAD OF UPDATE Triggers .

Per fare un BEFORE UPDATE in SQL Server uso un trucco. Faccio un falso aggiornamento del record ( UPDATE Table SET Field = Field ), in modo tale da ottenere l’immagine precedente del record.

Ricorda che quando usi un trigger invece, non impegnerà l’inserto a meno che non lo dici espressamente nel trigger. Invece di fare veramente questo, invece di quello che fai normalmente, quindi nessuna delle normali azioni di inserimento potrebbe accadere.