none
Como resgatar todos os valores de um DELETED RRS feed

  • Pergunta

  • Pessoal ew o seguinte..........

    Tenhum duas tabelas com relacionamento 1 para muito.....

    Onde se eu deletar o registro da tabela mae todos os registros da tabela filho tbm tem que ser deletado...

    mais antes que eles sejam deletados preciso atualizar uma outra tabela de estoque...

    Estou usando o DELETED pra pegar esses registro.......  mais so consigo resgatar o primeiro registro.... como posso fazer pra pegar os outros registros......???????


    Aqui estar o Codigo:

    CREATE TRIGGER [dbo].[Tr_Acerto_Estoque_Delete]
       ON  [dbo].[tb_entrada_epi]
       AFTER DELETE
    AS
    BEGIN
       
        /* Aqui estou declarando as variaveis pra pegar os dados que estao sendo DELETADOS  */

        DECLARE @Cod_Movimento as INT
        DECLARE @Cod_Epi as INT
        DECLARE @Qnt as INT

        /* Aqui as que vao me dar a quantidade anterior dos itens   */

        DECLARE @Qnt_Salva as INT

        /* Aqui a quantidade que vai se adicionada   */

        DECLARE @Qnt_Add as INT
           
        /* Aqui estou pegando os dados que estao sendo excluidos   */

        SELECT @Cod_Movimento = cod_movimento_entrada FROM DELETED
        SELECT @Cod_Epi = cod_epi FROM DELETED
        SELECT @Qnt = qnt FROM DELETED


        /* Aqui a quantidade anterior do item       */

        SELECT @Qnt_Salva = qtde_entrada FROM tb_epi WHERE cod_epi = @Cod_Epi


        /* Aqui estou fazendo o calculo pra atualizar o estoque   */

        SET @Qnt_Add = @Qnt_Salva - @Qnt


        /* E aqui estou atualizando os dados...   */
        UPDATE tb_epi SET qtde_entrada = @Qnt_Add WHERE cod_epi = @Cod_Epi

    END
    segunda-feira, 23 de março de 2009 20:11

Respostas

  • Pronto COnsegui........

    Aqui estar o Codigo.............




    ALTER TRIGGER [dbo].[Tr_Acerto_Estoque_Delete]
       ON  [dbo].[tb_entrada_epi]
       AFTER DELETE
    AS
    BEGIN

        DECLARE @Cod_Epi as INT
        DECLARE @Qnt as INT

        DECLARE @Qnt_Salva as INT
        DECLARE @Qnt_Add as INT    
        
        DECLARE Epi_DELETED CURSOR FOR SELECT cod_Epi, qnt FROM DELETED
       
        OPEN Epi_DELETED
       
        FETCH NEXT FROM Epi_DELETED INTO @Cod_Epi, @Qnt
       
        WHILE @@FETCH_STATUS = 0
        BEGIN
       
              SELECT @Qnt_Salva = qtde_entrada FROM tb_epi WHERE cod_epi = @Cod_Epi

            SET @Qnt_Add = @Qnt_Salva - @Qnt

            UPDATE tb_epi SET qtde_entrada = @Qnt_Add WHERE cod_epi = @Cod_Epi     
         
            FETCH NEXT FROM Epi_DELETED INTO @Cod_Epi, @Qnt
       
        END
       
        CLOSE Epi_DELETED
       
        DEALLOCATE Epi_DELETED

    END
    quarta-feira, 25 de março de 2009 14:00

Todas as Respostas

  • Já tentou jogar o conteu do deleted para uma tabela temporária.

    INSERT #TEMPORARIA SET SELECT * FROM DELETED

    dai vc trabalha com os registros. Lembre-se que a tabela estará disponivel apenas enquanto a sessão estiver ativa. Usando tabelas temporárias o I/O no servidor vai ser maior também. Entretanto é uma solução para o seu problema.

    É usual também, criar um campo na tabela que o pessoal costuma chamar de FLAG. Dai vc dá um INSERT neste campo. Tipo 0 para DELETADO. Mas vai dar mais trabalho, porque vc teria que mudar algumas regras na sua aplicação. Mas também, é uma solução.

    Nunca tentei, mas acho que se você jogar todo o conteudo da DELETED para um cursor daria certo também.

    Espero ter dado a você alguma luz.

    Abraços.

    Bruno Ciscotto


    Att. Bruno Ciscotto
    segunda-feira, 23 de março de 2009 20:53
  • Bruno,

    Vc  tem algum exemplo de cursor.......

    Pois o seguinte....

    Eu consigo inserir os dados na outra tabela....  mais no meu caso....   teria que criar outros gatinhos nessa tabela... pois preciso realizar umas consultas e calcular alguns dados  com os dados deletados..... para inserir na tabela correta............


    Vlwss......
    quarta-feira, 25 de março de 2009 10:56
  • Tipo o Sequinte.....

    Dados da Tabela DELETED

    ___ID_______Qnt___
    |     1       |     10     |
    |     2       |     20     |
    |     3       |     30     |
    |     4       |     40     |
    |     5       |     50     |


    Tipo quero que pegar a Primeira linha e realizar uns calculos com o campo "Qnt" e inserir em uma outra tabela.....

    Depois pegar o a Segunda Linha e tbm realizar uns calculos com o campo "Qnt" e inserir em uma outra tabela.....

    assim por diante..........

    tem ideia...........

    Vlwsss
    quarta-feira, 25 de março de 2009 12:14
  • Malucows

    Isto não parece tão complicado, vc tem algum exemplo dos calculos para cada coluna?

    em um calculos simples

    UPDATE b
    SET qtde_entrada = a.qnt
    FROM DELETED a INNER JOIN tb_epi B ON a.cod_epi = b.cod_epi


    Att.
    Marcelo Fernandes
    quarta-feira, 25 de março de 2009 12:27
    Moderador
  • Pronto COnsegui........

    Aqui estar o Codigo.............




    ALTER TRIGGER [dbo].[Tr_Acerto_Estoque_Delete]
       ON  [dbo].[tb_entrada_epi]
       AFTER DELETE
    AS
    BEGIN

        DECLARE @Cod_Epi as INT
        DECLARE @Qnt as INT

        DECLARE @Qnt_Salva as INT
        DECLARE @Qnt_Add as INT    
        
        DECLARE Epi_DELETED CURSOR FOR SELECT cod_Epi, qnt FROM DELETED
       
        OPEN Epi_DELETED
       
        FETCH NEXT FROM Epi_DELETED INTO @Cod_Epi, @Qnt
       
        WHILE @@FETCH_STATUS = 0
        BEGIN
       
              SELECT @Qnt_Salva = qtde_entrada FROM tb_epi WHERE cod_epi = @Cod_Epi

            SET @Qnt_Add = @Qnt_Salva - @Qnt

            UPDATE tb_epi SET qtde_entrada = @Qnt_Add WHERE cod_epi = @Cod_Epi     
         
            FETCH NEXT FROM Epi_DELETED INTO @Cod_Epi, @Qnt
       
        END
       
        CLOSE Epi_DELETED
       
        DEALLOCATE Epi_DELETED

    END
    quarta-feira, 25 de março de 2009 14:00