none
TRIGGER UPDATE RRS feed

  • Pergunta

  • por favor.

    Estou estudando TRIGGER.

    Tenho duas tabelas, produtos e estoque.

    produtos: ProdutoID, Pro_Nome, Pro_Qtde

    Estoque: CodigoIF, ProdutoID, Qtde.

    DEsejo que quando seja inserido um produto na Tabela Produto, o TRIGGER faça o seguinte:

    Se o item nao existir, insira na tabela estoque

    Se ja existir, faça a atualização, somando, no campo QTDE

    Pesquisei bastante, e fiz isso:

           

    create TRIGGER tr_produtosGeral
    ON Produtos
    AFTER INSERT, UPDATE
    AS

    DECLARE @ProdutoID INT,
            @pro_quantidade INT

    SELECT @ProdutoID=ProdutoID, @pro_quantidade=pro_qtde
    FROM INSERTED

    IF UPDATE(pro_qtde)
     BEGIN
       --SET NOCOUNT ON 
      UPDATE Estoque
      SET est_quantidade = est_quantidade + D.Pro_Qtde
      FROM Estoque  
       INNER JOIN INSERTED as D
        ON Estoque.ProdutoID = D.ProdutoID

     END
     GO

    ----------Neste caso aqui so esta atualizando

    domingo, 9 de agosto de 2020 15:49

Todas as Respostas

  • Boa tarde,

    Acho que você pode utilizar o comando Merge em vez do Update.

    Com o Merge é possível atualizar se já existir a linha ou inserir se não existir. Ex:

    merge Estoque as e
    using
    (
        select i.ProdutoID, i.Pro_Qtde - coalesce(d.Pro_Qtde, 0) as Qtde
        from INSERTED as i
        left join DELETED as d on d.ProdutoID = i.ProdutoID
    ) as s on s.ProdutoID = e.ProdutoID
        when matched then
            UPDATE SET est_quantidade = est_quantidade + s.Qtde
        when not matched then
            insert (ProdutoID, Qtde) values (s.ProdutoID, s.Qtde);
    

    Acrescentei no exemplo acima o uso da tabela Deleted para subtrair o valor anterior existente na linha no caso de ter sido executado um Update.

    Espero que ajude


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

    segunda-feira, 10 de agosto de 2020 18:31