none
OUTPUT DE TRIGGER EM STORED PROCEDURE RRS feed

  • Pergunta

  •   Boa tarde a todos,

      Eu criei uma trigger que apos o insert chama um SPT essa STP é um processo separado e não paça nenhum retorno pra trigger, a trigger só foi usada para

    ler os registro inserido na tabela( essa tabela é uma tabela de registro de eventos )e se receber ira executar um procedimento, externo ele faz o processo a parte e nesse caso não precisa passar nenhum retorno pra trigger, mas a trigger espera o retorno da STP e a mesma é demorada(a STP é um bulk insert 100% testado em separado e ta ok), so que pela minha pouca usuabilidade em trigger com stp eu me bati nessa.

    Segue meu codigo da trigger:

    AFTER INSERT
    AS 
    BEGIN
       SET NOCOUNT ON;
      
                DECLARE @JOB INT,
                        @EMPRESA INT,
                        @USUARIO VARCHAR(20),
                        @DESCRICAO VARCHAR (30)
              
                  SELECT @JOB=IDJOB, @EMPRESA=EMPRESA, @USUARIO=EMPRESA , @DESCRICAO=NOME 
                  FROM INSERTED
     
            BEGIN
             IF @DESCRICAO LIKE ('% EXECUÇÃO X%')
             BEGIN
             
              
              
            exec sp_rel
           
             END 
           END    
     END      
    Qualquer duvida na logica me avisem que eu explico mais.


    • Editado Salmos_Soso quinta-feira, 16 de agosto de 2012 21:28
    • Editado Gustavo Maia Aguiar segunda-feira, 20 de agosto de 2012 12:36 Termo incorreto (Stored e não Storage)
    quinta-feira, 16 de agosto de 2012 21:25

Respostas

  • Bom Dia,

    Esse é o lado negativo da trigger. Como o seu processamento é síncrono, ela só irá liberar a transação quando ela finalizar. Não há como fazer com que a trigger sinalize o término e deixar a SP em execução. Isso só será possível se a trigger disparar um comando de forma assíncrona, mas nesse caso você teria que utilizar o Service Broker. Outra alternativa é colocar a SP em um job, e pedir pra trigger chamar um JOB, mas essa solução além de muito deselegante, irá impedir o uso paralelo da trigger (o que em outras palavras significa que a tabela teria que ser utilizada por uma sessão por vez).

    Se o Service Broker não for uma opção, tente tirar esse processamento da trigger. Uma trigger que roda um processo de bulk insert não costuma ser algo performático e (ou) escalável.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível


    segunda-feira, 20 de agosto de 2012 14:43

Todas as Respostas

  • Salmos,

    Qual é o seu problema? Eu utilizo a muito tempo Triggers chamando Stored Procedures.

    O que você esta querendo fazer?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 17 de agosto de 2012 18:44
  •     Junior,

       Na empresa onde trabalho existe um sistema de gestão, nele eles geram um arquivo txt, existe uma tabela de logs de execução no sistema que é onde eu estou tirando a trigger. Só que a trigger para retornar ela espera a execução da STP que é um bulkinsert. Só que essa demora faz o sistema travar pq a trigger da um lock na tabela. Eu queria uma luz pra eu execuar a trigger, chamar a STP e a STP ficar executando e retornar o comando pra trigger poder fechar.

        Quero poder dar um 'return' pra trigger sem a stp parar de executar.

    Espero ter esclarecido.

    segunda-feira, 20 de agosto de 2012 13:04
  • Bom Dia,

    Esse é o lado negativo da trigger. Como o seu processamento é síncrono, ela só irá liberar a transação quando ela finalizar. Não há como fazer com que a trigger sinalize o término e deixar a SP em execução. Isso só será possível se a trigger disparar um comando de forma assíncrona, mas nesse caso você teria que utilizar o Service Broker. Outra alternativa é colocar a SP em um job, e pedir pra trigger chamar um JOB, mas essa solução além de muito deselegante, irá impedir o uso paralelo da trigger (o que em outras palavras significa que a tabela teria que ser utilizada por uma sessão por vez).

    Se o Service Broker não for uma opção, tente tirar esse processamento da trigger. Uma trigger que roda um processo de bulk insert não costuma ser algo performático e (ou) escalável.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível


    segunda-feira, 20 de agosto de 2012 14:43
  •   Bom dia Gustavo,

     Esta era o ponto que eu queria chegar, uma maneira e eu ter um gatilho assincrono, ja usou o service broker com trigger?

    • Sugerido como Resposta Saimon Barbosa quinta-feira, 30 de agosto de 2012 20:34
    quarta-feira, 22 de agosto de 2012 15:02