none
Erro na criação de um Trigger RRS feed

  • Pergunta

  • Criei o seguinte Trigger abaixo para criar uma tabela de log, mas estou recebendo a seguinte mensagem quando tento alterar um registro na tabela de origem : O(s) valor(es) da linha atualizado(s) ou excluido(s) não tornam a linha exclusiva ou alteram várias linhas (2 linhas). e não permite que eu altere registros na tabela de origem.

    Alguem pode me ajuda ?

    ALTER TRIGGER [dbo].[TR_Contas_2012Update]

       ON  [dbo].[LEITURAS_VALORES_2012]

       AFTER UPDATE

    AS

    BEGIN

         

          Declare @Usuario_Alterando as int

          Declare @Tabela_Alterada as nvarchar(25)

          Declare @Registro_Alterado as nvarchar(10)

          Declare @Campo_Alterado as nvarchar(20)

          Declare @Valor_Anterior as nvarchar(60)

          Declare @Valor_Novo as nvarchar(60)

         

          If Update(LEITURA)

               

                Begin

                      Set @Tabela_Alterada = 'LEITURAS_VALORES_2012'      

                      set @Campo_Alterado = 'LEITURA'

    SELECT @Registro_Alterado=i.INSCRICAO, @Valor_Anterior=d.LEITURA, @Valor_Novo=i.LEITURA

    FROM Deleted d join Inserted i on i.INSCRICAO = d.INSCRICAO

                     

                      INSERT INTO SEGURANCA

    (Usuario, Datahora, COD_PROG, Tabela, TipoMov, Registro, Campo, ValAnt, ValAtu, Motivo)

                      VALUES

                      ('1', ---SUSER_SNAME(), 

                      GETDATE(),

                      '1',

                      @Tabela_Alterada,

                      'U',

                      @Registro_Alterado,

                      @Campo_Alterado,

                      @Valor_Anterior,

                      @Valor_Novo,

                      SUSER_SNAME()

                      )

                end

         

    END

    terça-feira, 19 de junho de 2012 00:27

Respostas

  • Mauricio,

    O SQL Server que esta retornando esta linha de erro?

    Bom vamos por partes, quando você processa uma trigger ele é reconhecido com o um bloco transacional.

    Faça o seguinte dentro do código do seu trigger utilize comando Set NoCount On, para que o SQL Server não apresente o retorno de linhas processadas pelo Trigger.

    O problema pode estar ocorrendo no Select.


    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]

    • Sugerido como Resposta Heloisa Pires quarta-feira, 27 de junho de 2012 11:48
    • Marcado como Resposta Heloisa Pires quinta-feira, 28 de junho de 2012 13:46
    terça-feira, 19 de junho de 2012 18:32