none
trigger de atualização RRS feed

  • Pergunta

  • Bom dia, estou com uma dúvida na sintaxe de uma trigger.

    Preciso de uma trigger que me atualize o estoque quando uma venda for deletada do banco.

    preciso que a quantidade de produtos vendida seja devolvida ao estoque.

    porém não sei como fazer a parte do se a venda dor deletada.

    o que consegui fazer foi o seguinte:

    me falta o seguinte:

    if id_vendas is delete :   (essa é a parte que nao consigo fazer, nao sei como fazer esta sintaxe)


    acontece o seguinte:

                SELECT
    @Produto = Produto_id, @Quantidade = Quantidade

                FROM INSERTED

                        UPDATE Produtos
    SET Estoque += @Quantidade


    • Editado Rafael.alm terça-feira, 20 de março de 2012 14:35
    terça-feira, 20 de março de 2012 14:29

Respostas

  • Bom dia Rafael,

     

    Você deve usar uma trigger de DELETE. A cada venda deletada essa trigger será disparada e fará a atualização da sua tabela de estoque.

    Nesse caso você não irá trabalhar com  "INSERTED" no seu UPDATE e sim com DELETED.

    No exemplo abaixo eu parti do pressuposto que sua tabela de vendas possui o campo Produto que também está na tabela de Estoque.
    A cada registro deletado da tabela de Venda, para aquele produto ele fará o Update da quantidade, somando o que já existe na tabela Estoque com a quantidade que está na venda que está sendo excluida.

    CREATE TRIGGER [dbo].[AtualizaEstoque] ON [dbo].[Venda] FOR DELETE AS
    	SET NOCOUNT ON
    	UPDATE Est
    SET Est.Quantidade = Est.Quantidade + Venda.Quantidade FROM Estoque Est INNER JOIN deleted Venda on Venda.Produto = Est.Produto SET NOCOUNT OFF GO

     

    Caso a associação entre as duas tabelas não seja por produto ou apenas por esse campo, apenas adapte a sua necessidade.

     

    Espero ter ajudado

     

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Sugerido como Resposta Mariana Del Nero terça-feira, 20 de março de 2012 17:39
    • Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 13:03
    terça-feira, 20 de março de 2012 15:00

Todas as Respostas

  • Bom dia Rafael,

     

    Você deve usar uma trigger de DELETE. A cada venda deletada essa trigger será disparada e fará a atualização da sua tabela de estoque.

    Nesse caso você não irá trabalhar com  "INSERTED" no seu UPDATE e sim com DELETED.

    No exemplo abaixo eu parti do pressuposto que sua tabela de vendas possui o campo Produto que também está na tabela de Estoque.
    A cada registro deletado da tabela de Venda, para aquele produto ele fará o Update da quantidade, somando o que já existe na tabela Estoque com a quantidade que está na venda que está sendo excluida.

    CREATE TRIGGER [dbo].[AtualizaEstoque] ON [dbo].[Venda] FOR DELETE AS
    	SET NOCOUNT ON
    	UPDATE Est
    SET Est.Quantidade = Est.Quantidade + Venda.Quantidade FROM Estoque Est INNER JOIN deleted Venda on Venda.Produto = Est.Produto SET NOCOUNT OFF GO

     

    Caso a associação entre as duas tabelas não seja por produto ou apenas por esse campo, apenas adapte a sua necessidade.

     

    Espero ter ajudado

     

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Sugerido como Resposta Mariana Del Nero terça-feira, 20 de março de 2012 17:39
    • Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 13:03
    terça-feira, 20 de março de 2012 15:00
  • Valeu mariana, ajudou muito!
    terça-feira, 20 de março de 2012 16:54