>Salve, domanda stupida ma non trovo la risposta. Ho creato un
>trigger che viene eseguito in caso in insert/update/delete su
>di una tabella.. devo capire all'interno del trigger se è stato
>chiamato per insert update o delete come faccio ?
La soluzione più semplice ed ordinata consiste nel definire 3 triggers distinti per ogni operazione DML
Comunque per rispondere alla tua domanda puoi fare riferimento a questo esempio:
USE tempdb;
CREATE TABLE dbo.Students(
StudentID int NOT NULL,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL
);
GO
CREATE TRIGGER trIUD_Students
ON dbo.Students
FOR INSERT, UPDATE, DELETE
AS
IF EXISTS(SELECT * FROM INSERTED)
AND EXISTS(SELECT * FROM DELETED)
BEGIN
PRINT 'UPDATE';
RETURN
END
IF EXISTS(SELECT * FROM INSERTED)
PRINT 'INSERT';
ELSE
PRINT 'DELETE';
GO
INSERT dbo.Students VALUES(1, 'Lorenzo', 'Benaglia');
/* Output:
INSERT
(1 row(s) affected)
*/
UPDATE dbo.Students
SET FirstName = 'Andrea',
LastName = 'Montanari';
/* Output:
UPDATE
(1 row(s) affected)
*/
DELETE dbo.Students;
/* Output:
DELETE
(1 row(s) affected)
*/
DROP TABLE dbo.Students;
>Questo mi serve per prendere la chiave univoca tramite SELECT
>ID FROM INSERTED oppure SELECT ID FROM UPDATED.
Non esiste alcuna tabella virtuale chiamata UPDATED
In caso di UPDATE verranno popolate entrambe le tabelle virtuali INSERTED e DELETED, rispettivamente con i nuovi ed i vecchi valori.
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org