Array
(
)

Trigger SQL

Orakulo
   - 19 fev 2016

Boa tarde amigos....
Preciso de vossa valiosa ajuda !
Preciso disparar um trigger no SQL com esse update:

update SD1010
set D1_X_NMFOR = A2_NOME
from SA2010 join SD1010 on D1_FORNECE = A2_COD and D1_LOJA = A2_LOJA
where D1_X_NMFOR = '' and SA2010.D_E_L_E_T_ <> '*' and SD1010.D_E_L_E_T_ <> '*'

Se jogar ele direto no trigger sei que não irá funcionar
CREATE TRIGGER uTRG_Atualiza
ON SD1010
for after insert
AS
BEGIN
update SD1010
set D1_X_NMFOR = A2_NOME
from SA2010 join SD1010 on D1_FORNECE = A2_COD and D1_LOJA = A2_LOJA
where D1_X_NMFOR = '' and SA2010.D_E_L_E_T_ <> '*' and SD1010.D_E_L_E_T_ <> '*'
END

Marcos P
   - 19 fev 2016

Sempre que postar código no fórum, utilize a tag <Inserir Código>... isso ajuda, em muito, o entendimento do problema.

Imagino que você queira dizer que isso não funciona, pois você está tentando fazer um UPDATE na mesma tabela ( na verdade, no mesmo registro ) que está fazendo INSERT.

É essa sua dificuldade ?

Se for, você precisa compreender melhor o conceito de INSERTED que é, apenas para fins didáticos, uma "tabela temporária" que contém apenas o registro que você está manipulando em tempo de inserção na trigger AFTER INSERT.

Dê um olhada nesse link aqui mesmo do DevMedia, tem vários exemplos que podem lhe ser úteis.

Lembrando que no exemplo que você colocou, D1_X_NMFOR receberá sempre o mesmo valor, seja no INSERT, seja no UPDATE via INSERTED, pois a única referência de valor que o Sql Server tem naquele momento, é o mesmo conteúdo de A2_NOME.

Caso sua dúvida nãos seja essa, detalhe-a melhor.