Voglio creare un trigger prima di eliminare. Quando elimino un record da una tabella, il record deve essere inserito in una tabella cronologia. Come posso fare questo in SQL Server?Come creare un trigger prima di eliminare in SQL Server?
risposta
In questa situazione, è probabilmente meglio fare un trigger regolare "dopo". Questo è l'approccio più comune a questo tipo di situazione.
Qualcosa di simile
CREATE TRIGGER TRG_AUD_DEL
ON yourTable
FOR DELETE
AS
INSERT INTO my_audit_table (col1, col2, ...)
SELECT col1, col2...
FROM DELETED
Quello che accadrà è, quando un record (o record!) Vengono eliminati dal tavolo, la riga eliminata sarà inserito nel my_audit_table
La DELETED
tabella è una tabella virtuale che contiene il record (s) come erano immediatamente prima dell'eliminazione.
Inoltre, si noti che il trigger viene eseguito come parte della transazione implicita sull'istruzione delete, quindi se l'eliminazione fallisce e si ripristina, anche il trigger arretra.
Si potrebbe anche usare INSTEAD OF DELETE
CREATE TRIGGER dbo.SomeTableYouWhatToDeleteFrom
ON dbo.YourTable
INSTEAD OF DELETE
AS
BEGIN
-- Some code you want to do before delete
DELETE YourTable
FROM DELETED D
INNER JOIN dbo.YourTable T ON T.PK_1 = D.PK_1
END
INSTEAD OF DELETE non può essere utilizzato poiché ho eliminato la cascata abilitata sulla tabella. – user1374263
FWIW, è possibile modificare tutte le chiavi esterne di eliminazione in cascata su semplici chiavi esterne ed elaborare le eliminazioni dall'interno di questo trigger, che renderebbe chiaro in un punto tutto ciò che stava accadendo in seguito all'eliminazione. – Tony
Potrebbe essere fatto in seguito passaggi per la diciamo in questo esempio sto usando tavolo del cliente:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
LAST_UPDATED DATETIME,
PRIMARY KEY (ID)
);
creare la storia:
CREATE TABLE CUSTOMERS_HIST( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , LAST_UPDATED DATETIME, PRIMARY KEY (ID) );
Trigger su tabella di origine come qui di seguito in caso di eliminazione:
CREATE TRIGGER TRG_CUSTOMERS_DEL ON CUSTOMERS FOR DELETE AS INSERT INTO CUSTOMERS_HIST (ID, NAME, AGE, ADDRESS, LAST_UPDATED) SELECT ID, NAME, AGE, ADDRESS, LAST_UPDATED FROM DELETED
- 1. Come posso creare un trigger disabilitato in SQL Server 2005?
- 2. Crea trigger in SQL Server
- 3. Disabilita Abilita server Trigger SQL
- 4. Come creare un trigger MySQL in phpmyadmin
- 5. SQL Server ON DELETE Trigger
- 6. SQL Server dopo l'aggiornamento trigger
- 7. In ogni caso per creare un trigger DDL di SQL Server per le istruzioni "SELECT"?
- 8. eliminare la riga con un Mysql trigger
- 9. Come creare un TRIGGER in SEQUELIZE (nodoJS)?
- 10. Come creare un tipo di tabella in SQL Server 2005
- 11. SQL Server Trigger - Invia messaggio alla coda
- 12. SQL Server trigger commutazione Insert, Delete, Update
- 13. SQL Server: verificare se un trigger è abilitato o disabilitato?
- 14. Come creare un vincolo univoco composito in SQL Server 2005
- 15. Eliminare un record LINQ su SQL senza caricarlo prima
- 16. 11 secondi per eliminare 240 righe in SQL Server
- 17. SQL Server 2008: eliminare le righe duplicate
- 18. Eliminare tutte le viste da SQL Server
- 19. Come convalidare prima del trigger di inserimento in sqlite
- 20. Creare un utente per SQL Server 2008?
- 21. Ricerca di script T-SQL per eliminare un lavoro SQL
- 22. Posso creare un indice "Covering, Spatial" in SQL Server 2008?
- 23. SQL Server 2005 - rimozione dei trigger di tabella?
- 24. Come creare una tabella di sistema di SQL Server
- 25. SQL Server: ottenere il nome dell'applicazione che causa un aggiornamento in un trigger
- 26. Scrittura dopo trigger di inserimento nel server SQL
- 27. SQL Server Convalida un proc memorizzato prima di eseguirlo?
- 28. Come creare una tabella di sola lettura in SQL Server?
- 29. Come ottenere il primo valore prima delimitatore in SQL Server
- 30. Impossibile creare sequenza in SQL Server 2008
Grazie per la risposta, funziona benissimo – user1374263
Notando che per il rollback di lavorare su un errore che un blocco try/catch può essere necessaria entro il trigger [(esempio)] (http://dba.stackexchange.com/questions/57909) dipende probabilmente da ciò che causa l'errore. – crokusek
Un buon punto, ma ricorda che si applica solo a RAISEERROR. Un errore di chiusura regolare dell'istruzione (ad esempio violazione di PK, ecc.) Comporterà il rollback della transazione implicita con inizio all'esterno del trigger. –