Trigger de Update
11/01/2016
0
Obrigado
Filipe Siqueira
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
Mais Posts
11/01/2016
Marcos P
CREATE TRIGGER trNomeTrigger ON Tabela FOR UPDATE AS UPDATE OutroBD.dbo.OutraTabela SET Coluna = Valor
11/01/2016
Filipe Siqueira
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?
11/01/2016
Marcos P
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
11/01/2016
Claudio Lopes
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 !
11/01/2016
Filipe Siqueira
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....
11/01/2016
Filipe Siqueira
11/01/2016
Marcos P
SET @Matricula = FUMATFUNC FROM inserted
por...
SELECT @Matricula = FUMATFUNC FROM inserted
11/01/2016
Filipe Siqueira
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.
11/01/2016
Marcos P
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]
11/01/2016
Filipe Siqueira
11/01/2016
Filipe Siqueira
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
Clique aqui para fazer login e interagir na Comunidade :)