In most cases the ideal is not to save calculation attributes in tables, but if you want to TRIGGER
it would look like this:
IF OBJECT_ID('tgr_itemvenda_ai', 'TR') IS NULL
BEGIN
EXEC('CREATE TRIGGER tgr_itemvenda_ai ON ItemVenda FOR INSERT AS BEGIN SELECT 1 END');
END;
GO
ALTER TRIGGER tgr_itemvenda_ai
ON ItemContrato
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE p
SET p.Quantidade = p.Quantidade - i.Quantidade
FROM Produto p
INNER JOIN inserted i ON i.codProduto = p.codProduto;
END;
GO
The suggestion I give you to not have to use TRIGGER
is to use a stock table in which you close the account on a monthly basis or according to your needs:
CREATE TABLE Estoque(
codEstoque INT PRIMARY KEY IDENTITY(1, 1),
codProduto INT NOT NULL,
Quantidade INT NOT NULL,
Inicio DATE NOT NULL,
Fim DATE NOT NULL,
CONSTRAINT fk_EstoqueProduto FOREIGN KEY(codProduto) REFERENCES Produto
ON DELETE CASCADE
ON UPDATE CASCADE
);
Considering that you have a data
column in the Venda
table:
SELECT e.codProduto,
CONVERT(VARCHAR(10), e.Inicio, 103) AS Inicio,
CONVERT(VARCHAR(10), e.Fim, 103) AS Fim,
e.Quantidade - SUM(iv.Quantidade) AS disponivelFim
FROM Estoque e
INNER JOIN ItemVenda iv ON iv.codProduto = e.codProduto
INNER JOIN Venda v ON v.codVenda = iv.codVenda
WHERE v.data BETWEEN e.Inicio AND e.Fim
GROUP BY e.codEstoque,
e.codProduto,
e.Inicio,
e.Fim,
e.Quantidade