É um pouco como você espera. Se a transação não for confirmada, um acionador AFTER UPDATE
não será acionado, mas será válido somente para a transação inteira se você verificar o valor de @@Error
após suas declarações e reverter a transação.
Considere isso:
CREATE TABLE Table1 (SomeNumber int NOT NULL)
CREATE TABLE Table2 (SomeNumber int)
CREATE TRIGGER UpdAfterTrigger
ON Table1
AFTER UPDATE
AS
BEGIN
INSERT Table2 SELECT 1
END
INSERT Table1 (SomeNumber) SELECT 1
BEGIN TRANSACTION
UPDATE Table1 SET SomeNumber=1
UPDATE Table1 SET SomeNumber=1
UPDATE Table1 SET SomeNumber=1
UPDATE Table1 SET SomeNumber=1
UPDATE Table1 SET SomeNumber=NULL
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
O acionador não disparará nesse caso, pois a transação está sendo revertida devido ao erro ao inserir NULL
em uma coluna NOT NULL
.
Se você não verificar @@Error <> 0
e apenas confirmar cegamente a transação, o acionador neste exemplo será disparado para cada uma das quatro boas declarações UPDATE
no lote.