Usuário com melhor resposta
Executar Trigger quando for inserido um determinado código

Pergunta
-
Bom dia a Todos,
Estou tendo dificuldades em criar uma Trigger onde ele só pode ser executada quando for inserido um código.
Exemplo - foi inserido na Table1 no campo cdTable1 o código que eu quero 1162
Inserido código 1162
executa a trigger, dentro dessa trigger é chamada um procedure
executa procedure
Tem como fazer?
Desde já muito obrigado a todos!
Respostas
-
O gatilho será chamado sempre que houver a inserção.
Agora dentro dele, haverá a possibilidade de dizer quando a procedure deve ser executada, checando o valor do registro inserido. No código abaixo quero apenas que a COLUNA2 sofra um update, quando a COLUNA1 receber algum valor e esse valor for "VALOR1".
Ex:
CREATE TABLE TABELA_TESTE(ID INT IDENTITY(1,1) PRIMARY KEY, COLUNA1 VARCHAR(20), COLUNA2 VARCHAR(20)) GO CREATE TRIGGER TR_TESTINSERTUPDATE ON dbo.TABELA_TESTE AFTER INSERT,UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE(COLUNA1) BEGIN UPDATE TABELA_TESTE SET COLUNA2 = 'VALORNOVO' FROM TABELA_TESTE T INNER JOIN INSERTED I ON T.ID = I.ID WHERE I.COLUNA1 = 'VALOR1' END END GO INSERT INTO TABELA_TESTE(COLUNA1) VALUES ('VALOR4'), ('VALOR1'), ('VALOR3'), ('VALOR6') SELECT * FROM TABELA_TESTE GO INSERT INTO TABELA_TESTE(COLUNA2) VALUES ('VALOR5') SELECT * FROM TABELA_TESTE GO
Att,
Antero Marques
______________________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado Antero Marques quinta-feira, 30 de novembro de 2017 13:42
- Marcado como Resposta Marcio Camargo quinta-feira, 30 de novembro de 2017 15:22
Todas as Respostas
-
O gatilho será chamado sempre que houver a inserção.
Agora dentro dele, haverá a possibilidade de dizer quando a procedure deve ser executada, checando o valor do registro inserido. No código abaixo quero apenas que a COLUNA2 sofra um update, quando a COLUNA1 receber algum valor e esse valor for "VALOR1".
Ex:
CREATE TABLE TABELA_TESTE(ID INT IDENTITY(1,1) PRIMARY KEY, COLUNA1 VARCHAR(20), COLUNA2 VARCHAR(20)) GO CREATE TRIGGER TR_TESTINSERTUPDATE ON dbo.TABELA_TESTE AFTER INSERT,UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE(COLUNA1) BEGIN UPDATE TABELA_TESTE SET COLUNA2 = 'VALORNOVO' FROM TABELA_TESTE T INNER JOIN INSERTED I ON T.ID = I.ID WHERE I.COLUNA1 = 'VALOR1' END END GO INSERT INTO TABELA_TESTE(COLUNA1) VALUES ('VALOR4'), ('VALOR1'), ('VALOR3'), ('VALOR6') SELECT * FROM TABELA_TESTE GO INSERT INTO TABELA_TESTE(COLUNA2) VALUES ('VALOR5') SELECT * FROM TABELA_TESTE GO
Att,
Antero Marques
______________________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado Antero Marques quinta-feira, 30 de novembro de 2017 13:42
- Marcado como Resposta Marcio Camargo quinta-feira, 30 de novembro de 2017 15:22
-
Boa tarde Antero,
Obrigado pelo retorno.
Então criei a trigger pelo seu exemplo e está acontecendo que todo insert realizado executa a trigger.
Você poderia dar uma analisada nesse trigger?
ALTER TRIGGER [dbo].[T_teste] on [dbo].[TbdTesteTrigger] for insert AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. if(select cdTesteVal from inserted) = '1162' SET NOCOUNT ON; DECLARE @return_value int EXEC @return_value = [dbo].[pEnvioEmailTeste] SELECT 'Return Value' = @return_value END
Desde já obrigado!
-
Consegui Antero
Obrigado!
ALTER TRIGGER [dbo].[T_teste] on [dbo].[TbdTesteTrigger] for insert AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. --if(select cdTesteVal from inserted) = '1162' SET NOCOUNT ON; if(select cdTesteVal from inserted) = '1162' begin DECLARE @return_value int EXEC @return_value = [dbo].[pEnvioEmailTeste] SELECT 'Return Value' = @return_value end END
Era abrir e fechar o if
Vlw!