Trigger de Update
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?
Obrigado
Obrigado
Filipe Siqueira
Curtidas 0
Melhor post
Marcos P
11/01/2016
[CREATE TRIGGER ALTERAR_STATUS ON [FPw_teste].[dbo].[FUNCIONA] AFTER UPDATE AS 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" ?
GOSTEI 1
Mais Respostas
Marcos P
11/01/2016
Adapte a partir de...
CREATE TRIGGER trNomeTrigger ON Tabela FOR UPDATE AS UPDATE OutroBD.dbo.OutraTabela SET Coluna = Valor
GOSTEI 0
Filipe Siqueira
11/01/2016
Marcos P, Veja este código:
CREATE TRIGGER ALTERAR_STATUS
ON [FPw_teste].[dbo].[FUNCIONA]
AFTER UPDATE
AS
IF UPDATE (FUCODSITU)
UPDATE [DMPACESSOII_TESTE].[dbo].[FUNCIONA]
SET CD_SITUACAO_PESSOA = '11'
WHERE NU_MATRICULA = FUMATFUNC
END
GO
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?
CREATE TRIGGER ALTERAR_STATUS
ON [FPw_teste].[dbo].[FUNCIONA]
AFTER UPDATE
AS
IF UPDATE (FUCODSITU)
UPDATE [DMPACESSOII_TESTE].[dbo].[FUNCIONA]
SET CD_SITUACAO_PESSOA = '11'
WHERE NU_MATRICULA = FUMATFUNC
END
GO
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?
GOSTEI 0
Marcos P
11/01/2016
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...
Assumindo que "FUMATFUNC" é obrigatório em todos os registros da tabela, fica...
CREATE TRIGGER ALTERAR_STATUS ON [FPw_teste].[dbo].[FUNCIONA] AFTER UPDATE AS DECLARE @Matricula INT SET @Matricula = FUMATFUNC FROM inserted IF UPDATE (FUCODSITU) and (FCODSITU = 16) UPDATE [DMPACESSOII_TESTE].[dbo].[FUNCIONA] SET CD_SITUACAO_PESSOA = '11' WHERE NU_MATRICULA = @Matricula GO
GOSTEI 0
Claudio Lopes
11/01/2016
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.
GOSTEI 0
Marcos P
11/01/2016
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.
Perfeito !
Essa prática de encapsular regras de negócio em triggeres, aumenta ( em muito ) a dificuldade de depuração e manutenção do ambiente !
GOSTEI 0
Filipe Siqueira
11/01/2016
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....
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....
GOSTEI 0
Filipe Siqueira
11/01/2016
Bom dia Din... São duas aplicações diferentes por isso a necessidade de fazer via trigger ...
GOSTEI 0
Marcos P
11/01/2016
Troque...
por...
SET @Matricula = FUMATFUNC FROM inserted
por...
SELECT @Matricula = FUMATFUNC FROM inserted
GOSTEI 0
Filipe Siqueira
11/01/2016
Veja o erro na imagem...
GOSTEI 0
Filipe Siqueira
11/01/2016
[CREATE TRIGGER ALTERAR_STATUS
ON [FPw_teste].[dbo].[FUNCIONA]
AFTER UPDATE
AS
DECLARE @MATRICULA INT
SELECT @MATRICULA = FUMATFUNC FROM INSERTED
IF UPDATE (FUCODSITU)
UPDATE [DMPACESSOII_TESTE].[dbo].[PESSOA]
SET CD_SITUACAO_PESSOA = '11'
WHERE NU_MATRICULA = @MATRICULA]
[/code]
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.
ON [FPw_teste].[dbo].[FUNCIONA]
AFTER UPDATE
AS
DECLARE @MATRICULA INT
SELECT @MATRICULA = FUMATFUNC FROM INSERTED
IF UPDATE (FUCODSITU)
UPDATE [DMPACESSOII_TESTE].[dbo].[PESSOA]
SET CD_SITUACAO_PESSOA = '11'
WHERE NU_MATRICULA = @MATRICULA]
[/code]
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.
GOSTEI 0
Marcos P
11/01/2016
Basta que você insira a condição no IF, conforme já fiz acima...
Senão funcionar, faça...
IF UPDATE (FUCODSITU) and (FCODSITU in (16,17,18,19,20,21,22,23))
Senão funcionar, faça...
[CREATE TRIGGER ALTERAR_STATUS ON [FPw_teste].[dbo].[FUNCIONA] AFTER UPDATE AS 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]
GOSTEI 0
Filipe Siqueira
11/01/2016
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....
GOSTEI 0
Filipe Siqueira
11/01/2016
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!!!
Obrigado
Sim conheço o funcionamento da trigger e as cláusulas INSERTDE e UPDATE... Muito obrigado, a ajuda de vocês resolveu meu problema!!!
Obrigado
GOSTEI 0