none
Dúvida Trigger atualizar 1 campo e deixar outros conforme INSERTED RRS feed

  • Pergunta

  • Olá, estou precisando fazer uma regra dentro da trigger para usar DELETED e INSERTED.
    Porém não quero fazer o update com todos os campos, somente quero fazer o update com o campo do meu interesse. 

    Porém se eu fazer o update somente no meu campo, os outros campos alterados não são alterados.
    Como fazer isto?

    trigger abaixo:

    ALTER TRIGGER [dbo].[TR_ENDERECO_AUP] ON [dbo].[ENDERECO] 
    INSTEAD OF UPDATE
    AS 
      declare @EN_OBSERVACAO varchar(2000);
      
      if (select COUNT(*) from DELETED a where a.EN_OBSERVACAO like '%OrgaoPublico=%') = 0
      begin
        select @EN_OBSERVACAO = cast(EN_OBSERVACAO as varchar(2000)) from INSERTED;
      end
      else
      begin
        if (select COUNT(*) from INSERTED a where a.EN_OBSERVACAO like '%OrgaoPublico=%') = 0
        begin
          if (select COUNT(*) from DELETED a where a.EN_OBSERVACAO like '%OrgaoPublico=S%') > 0
          begin
            select @EN_OBSERVACAO = cast(EN_OBSERVACAO as varchar(2000)) + char(13) + char(10) + 'OrgaoPublico=S' from INSERTED;
          end
          if (select COUNT(*) from DELETED a where a.EN_OBSERVACAO like '%OrgaoPublico=N%') > 0
          begin
            select @EN_OBSERVACAO = cast(EN_OBSERVACAO as varchar(2000)) + char(13) + char(10) + 'OrgaoPublico=N' from INSERTED;
          end
        end
        else
          select @EN_OBSERVACAO = cast(EN_OBSERVACAO as varchar(2000)) from INSERTED;
      end  
      
      update
        ENDERECO
      set
        EN_ENDERECO = @EN_OBSERVACAO
      from
        ENDERECO a
        inner join INSERTED b on b.EN_CODIGO = a.EN_CODIGO
      
    ;
    

    []s!

    Marlon Tiedt
    www.sesmt.com.br

    sexta-feira, 10 de maio de 2013 18:20

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

      update
        ENDERECO
      set
        EN_ENDERECO = @EN_OBSERVACAO,
        ColunaX = b.ColunaX,
        ColunaY = b.ColunaY,
        ColunaZ = b.ColunaZ
      from
        ENDERECO a
        inner join INSERTED b on b.EN_CODIGO = a.EN_CODIGO

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 10 de maio de 2013 18:37
  • Olá,

    se eu fizer da forma que você me passou, somente as colunas X, Y, Z e EN_OBSERVAOCAO serão atualizados. Se tiver mais o campo A, e o usuário alterou o valor de A, a trigger não vai alterar este valor, então o A, ficará sem ser atualizado.

    Exemplo, se eu fizer este SQL abaixo o campo não vai ser atualizado por causa da trigger não atualizar o campo.

    update ENDERECO set A = 'ABC' where B = 1

    []s!


    Marlon Tiedt
    www.sesmt.com.br

    sexta-feira, 10 de maio de 2013 18:41
  • Olá,

    No exemplo onde coloquei as colunas X, Y e Z você teria que colocar todas as outras colunas existentes na tabela Endereco, com exceção da coluna EN_ENDERECO que recebe o valor de outra forma.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 10 de maio de 2013 18:50
  • Tem alguma maneira de não ter que colocar todas as colunas?

    []s!

    Marlon Tiedt
    www.sesmt.com.br

    sexta-feira, 10 de maio de 2013 19:04
  • Eu sinceramente não conheço outra forma, mas de repente alguem conhece uma outra forma.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 10 de maio de 2013 19:30