Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 542157
            [titulo] => Trigger de Update
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-01-11 11:45:38
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 378439
            [status] => M
            [isExample] => 
            [NomeUsuario] => Marcos P
            [Login] => pe@duosoft.com.br
            [Apelido] => 
            [Foto] => 378439_20140801115452.png
            [Conteudo] => [code]
[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]
[/code]

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

Trigger de Update

Filipe Siqueira
   - 11 jan 2016

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

Post mais votado

Marcos P
   - 11 jan 2016

#Código
[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" ?

1
|
0

Marcos P
   - 11 jan 2016

Adapte a partir de...

#Código
CREATE TRIGGER trNomeTrigger ON Tabela
FOR UPDATE
AS
UPDATE OutroBD.dbo.OutraTabela SET Coluna = Valor

Filipe Siqueira
   - 11 jan 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?

Marcos P
   - 11 jan 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...

#Código
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

Din
   - 11 jan 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.

Marcos P
   - 11 jan 2016


Citação:

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 !

Filipe Siqueira
   - 11 jan 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....

Filipe Siqueira
   - 11 jan 2016

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

Marcos P
   - 11 jan 2016

Troque...

#Código
SET @Matricula = FUMATFUNC FROM inserted

por...
#Código
SELECT @Matricula = FUMATFUNC FROM inserted

Filipe Siqueira
   - 11 jan 2016

Veja o erro na imagem...

Filipe Siqueira
   - 11 jan 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]
[/tagcod]

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.

Marcos P
   - 11 jan 2016

Basta que você insira a condição no IF, conforme já fiz acima...

#Código
IF UPDATE (FUCODSITU) and (FCODSITU in (16,17,18,19,20,21,22,23))


Senão funcionar, faça...

#Código
[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]

Filipe Siqueira
   - 11 jan 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....

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