none
Executar Trigger quando for inserido um determinado código RRS feed

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

    quinta-feira, 30 de novembro de 2017 12:59

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
    quinta-feira, 30 de novembro de 2017 13:34

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
    quinta-feira, 30 de novembro de 2017 13:34
  • 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!

    quinta-feira, 30 de novembro de 2017 15:15
  • 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!


    quinta-feira, 30 de novembro de 2017 15:21