Trigger de Update

11/01/2016

0

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
Filipe Siqueira

Filipe Siqueira

Responder

Post mais votado

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" ?

Marcos P

Marcos P
Responder

Mais Posts

11/01/2016

Marcos P

Adapte a partir de...

CREATE TRIGGER trNomeTrigger ON Tabela
FOR UPDATE
AS      
    UPDATE OutroBD.dbo.OutraTabela SET Coluna = Valor
Responder

11/01/2016

Filipe Siqueira

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?
Responder

11/01/2016

Marcos P

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...

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
Responder

11/01/2016

Claudio Lopes

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.
Responder

11/01/2016

Marcos P


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 !
Responder

11/01/2016

Filipe Siqueira

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....
Responder

11/01/2016

Filipe Siqueira

Bom dia Din... São duas aplicações diferentes por isso a necessidade de fazer via trigger ...
Responder

11/01/2016

Marcos P

Troque...

SET @Matricula = FUMATFUNC FROM inserted

por...
SELECT @Matricula = FUMATFUNC FROM inserted
Responder

11/01/2016

Filipe Siqueira

Veja o erro na imagem...
Responder

11/01/2016

Filipe Siqueira

[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.
Responder

11/01/2016

Marcos P

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...

[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]
Responder

11/01/2016

Filipe Siqueira

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....
Responder

11/01/2016

Filipe Siqueira

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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar