Olá,
por mais "batido" que pareça o assunto, gostaria de reforçar o conceito de tratamento dos registros inseridos, atualizados ou excluídos através de TRIGGERS.
Assim como no trânsito existe a Direção Defensiva, em desenvolvimento de software existe a Programação Defensiva.
Seguindo este conceito, eu recomendo sempre utilizar o CURSOR nas triggers, desta forma fica garantido o tratamento correto dos registros atualizados.
Então, lá vai o "esqueleto" padrão de uma trigger com o tratamento correto dos registros:
-- Tabela monitorada: Produto
-- Evento monitorado: Insert
CREATE TRIGGER ProdutoInsert ON Produto
WITH ENCRYPTION
FOR INSERT
AS
BEGIN
-- Declaracao de variaveis e cursor
DECLARE @Codigo INTEGER
DECLARE Cursor1 CURSOR
FOR
SELECT Codigo
FROM INSERTED
-- Abertura do cursor
OPEN Cursor1
FETCH NEXT FROM Cursor1 INTO @Codigo
-- Loop dos registros enquanto nao houver erros
WHILE @@FETCH_STATUS = 0
BEGIN
-- To-do...
-- Proximo
FETCH NEXT FROM Cursor1 INTO @Codigo
END
-- Fechamento do Cursor
CLOSE Cursor1
DEALLOCATE Cursor1
END
go