none
Trigger nao funciona direito quando sao deletados mais de 1 linha RRS feed

  • Pergunta

  • Ola
    estou tendo o seguinte problema
    criei uma trigger, porem, qdo eu executo um comando que valha para mais de uma linda ele nao funciona direito
    Por exemplo
    se faço uma comando desses tipo

    delete TBDebitoDescricaoESaque

    delete TBDebitoDescricaoESaque
    where DbtDescrID in (1,2,3)

    a trigger so funciona certo para a primeira linha, nas outras ela nao surte efeito
    alguem sabe o porque que que isso ocorre?
    T+ pessoal
    Falow

    CODIGO DA TRIGGER

    CREATE TRIGGER TR_TBDebitoDescricaoESaque

    ON TBDebitoDescricaoESaque

    FOR INSERT,UPDATE,DELETE

    AS

    DECLARE

    @DbtDescrIDNovo INT,

    @DbtDescrIDVelho INT

    SELECT @DbtDescrIDNovo = DbtDescrID FROM INSERTED

    SELECT @DbtDescrIDVelho = DbtDescrID FROM DELETED

    --ATIVA O DEBITO ANTERIOR

    UPDATE TBDebitoDescricao

    SET DbtDescrSttID = 1

    WHERE DbtDescrID = @DbtDescrIDVelho

    --DESATIVA O DEBITO ANTERIOR

    UPDATE TBDebitoDescricao

    SET DbtDescrSttID = 2

    WHERE DbtDescrID = @DbtDescrIDNovo

    segunda-feira, 12 de fevereiro de 2007 15:52

Respostas

  • vc. tem que usar um update com relacionamento veja este exemplo

      

    UPDATE TBDebitoDescricao

    SET DbtDescrSttID = 2

    from TBDebitoDescricao  inner join deleted on deleted.chave = TBDebitoDescricao .chave

     

    assim ele att todas as linhas do relacionamento. sempre que criar triggers esse e o procedimento correto.

     

    Abs;

     

    segunda-feira, 12 de fevereiro de 2007 16:15
  •  

     

     para update apenas em uma coluna use a funcao if update(coluna)

     para saber o que esta executando vc. deve fazer uma comparacao em exists das tabelas inserted e deleted por exemplo se tiver dados nas duas e um update, mais se vc. quer controlar isso acho melhor criar uma trigger para cada acao da menos trabalho e vc. ganha em controle.

     

    Abs;

     

     

    terça-feira, 13 de fevereiro de 2007 09:31

Todas as Respostas

  • vc. tem que usar um update com relacionamento veja este exemplo

      

    UPDATE TBDebitoDescricao

    SET DbtDescrSttID = 2

    from TBDebitoDescricao  inner join deleted on deleted.chave = TBDebitoDescricao .chave

     

    assim ele att todas as linhas do relacionamento. sempre que criar triggers esse e o procedimento correto.

     

    Abs;

     

    segunda-feira, 12 de fevereiro de 2007 16:15
  • entendi marcelo
    é como se fosse uma "tabela temporaria", pelo que entendi é claro
    agora mais mais duvidas sobre trigger

    1)tem como eu saber que "acao" esta sendo executada
    por exemplo
    UPDATE, DELETE, INSERT
    2)executar um update apenas se ocorrer numa coluna expecifica


    obrigado
    T+

    segunda-feira, 12 de fevereiro de 2007 20:17
  •  

     

     para update apenas em uma coluna use a funcao if update(coluna)

     para saber o que esta executando vc. deve fazer uma comparacao em exists das tabelas inserted e deleted por exemplo se tiver dados nas duas e um update, mais se vc. quer controlar isso acho melhor criar uma trigger para cada acao da menos trabalho e vc. ganha em controle.

     

    Abs;

     

     

    terça-feira, 13 de fevereiro de 2007 09:31
  • obrigado pelas dicas
    vao ser muito uteis
    mais devo optar nesse caso por usar uma unica trigger, tenho muito reuso de código(nesse exemplo nao porem nas trigger de controle de caixa...), entao vou ter que ficar repetindo codigo nas trigger, e como esse sistema vai ser alterado por outras pessoas, e não vou estar por perto para ver as alterações, pode ser que se esqueçam de alterar o codigo nas outras trigger.

    obrigado marcelo
    T+
    falow
    terça-feira, 13 de fevereiro de 2007 09:53