Eu tenho um gatilho, que quero tentar atualizar um campo com base no valor de outra tabela. Verifiquei manualmente se os dados existem na outra tabela, então sei que a junção funcionará. No entanto, os dados estão sendo inseridos na tabela, mas nenhuma atualização é feita. O que me faz pensar que fiz algo com o gatilho
Create Trigger [dbo].[trig_OnInsert] ON [dbo].[SHIPMENT]
For Insert
AS
BEGIN
UPDATE si
SET si.au = au.au + ' - ' + si.au
FROM SHIPMENT si
JOIN alphauniversal au
ON si.cm_controllerID = au.controllerid
WHERE si.cm_controllerID IN (Select si.cm_controllerID FROM Inserted)
End
Além disso, se a trigger apresentar um erro, ou não for executada com sucesso, o registro ainda será inserido na tabela?
Temo que a
where
cláusula com oin
está causando problemas. Tentejoining
para ainserted
mesa em vez disso. Aqui estão dois exemplos - um com ain
cláusula e outro com ajoin
para ainserted
tabela. Os resultados são diferentes usando meus dados de amostra.O código do gatilho é executado como parte da transação que realmente inseriu as linhas na tabela base. Se o gatilho encontrar um erro fatal , a transação deve reverter tudo o que foi feito durante essa transação. É um processo de tudo ou nada.
Você não pode engolir uma exceção dentro de um gatilho mesmo com lógica try/catch. Qualquer exceção dentro de um gatilho abortará a transação.