Trigger de Update - Fórum DevMedia
Bom dia Galera! Sou iniciante em Banco de Dados e estou com a seguinte situação: Preciso de um trigger que ao ser atualizado determinado campo em uma tabela, seja alterado um determinado campo de outra tabela em outro Banco de dados(sql server)OBS: Os dois bancos de dados estão na mesma instância.Alguém poderia me ajudar na criação desta trigger?
[CREATE TRIGGER ALTERAR_STATUS
ON [FPw_teste].[dbo].[FUNCIONA]
DECLATRE @CODSIT INT
SELECT @CODSIT = FUCODSITU FROM INSERTED
DECLARE @MATRICULA INT
SELECT @MATRICULA = FUMATFUNC FROM INSERTED
IF UPDATE (FUCODSITU) and (@CODSIT in (16,17,18,19,20,21,22,23))
UPDATE [DMPACESSOII_TESTE].[dbo].[PESSOA]
SET CD_SITUACAO_PESSOA = '11'
WHERE NU_MATRICULA = @MATRICULA]
Qual é exatamente a mensagem ?
FUCODSITU é uma coluna da tabela em que a trigger foi criada ?
Você consegue entender o princípio de funcionamento dessa trigger ? Principalmente as cláusulas "INSERTED" e "UPDATE" ?
Adapte a partir de...
CREATE TRIGGER trNomeTrigger ON Tabela
UPDATE OutroBD.dbo.OutraTabela SET Coluna = Valor
Marcos P, Veja este código:
CREATE TRIGGER ALTERAR_STATUS
IF UPDATE (FUCODSITU)
UPDATE [DMPACESSOII_TESTE].[dbo].[FUNCIONA]
WHERE NU_MATRICULA = FUMATFUNC
Preciso que toda vez que o campo FUCODSITU tiver seu valor alterado por exemplo para 16, o campo CD_SITUACAO_PESSOA seja alterado para 11... como verificar ou filtrar isso?
Sempre que postar código no fórum, use da tag "Inserir Código" ( aí em cima, à esquerda... )
Assumindo que "FUMATFUNC" é obrigatório em todos os registros da tabela, fica...
SET @Matricula = FUMATFUNC FROM inserted
IF UPDATE (FUCODSITU) and (FCODSITU = 16)
WHERE NU_MATRICULA = @Matricula
Filipe, pense se isso é a melhor prática, pois a regra de negócio deve ficar na sua aplicação, e não no banco de dados.
Essa prática de encapsular regras de negócio em triggeres, aumenta ( em muito ) a dificuldade de depuração e manutenção do ambiente !
Marcos obrigado pela ajuda, mas ainda estou com dificuldades....
Ao executar este código, recebo a seguinte mensagem: "Incorrect syntax near the keyord 'FROM' ". O campo FUMATFUNC é a matrícula do colaborador no Banco de dados FPw_teste e está em uma tabela chamada FUNCIONA. No banco de dados DMPACESSOII_TESTE a matrícula deste mesmo colaborador está no campo NU_MATRICULA na tabela PESSOA.Preciso que quando for alterado a situação no Fpw_teste, seja alterado também no DMPACESSOII... Desde já agradeço a atenção....
Bom dia Din... São duas aplicações diferentes por isso a necessidade de fazer via trigger ...
Veja o erro na imagem...
com esse código a trigger consegue ser executada, porém preciso que ela só seja executada quando o valor do campo FUCODSITU for alterado para os números de 16 à 23.
Basta que você insira a condição no IF, conforme já fiz acima...
IF UPDATE (FUCODSITU) and (FCODSITU in (16,17,18,19,20,21,22,23))
Senão funcionar, faça...
Se eu não coloco a condição, o código executa, mas se eu coloco a condição conforme acima, recebo erro dizendo que o nome da coluna CODSITU é inválido....
Marcos, a princípio deu certo aqui...Irei pedir pra validar através da aplicação...
Sim conheço o funcionamento da trigger e as cláusulas INSERTDE e UPDATE... Muito obrigado, a ajuda de vocês resolveu meu problema!!!