I'm new to programming and I'm doing a project for myself to consolidate the material. I tried all the methods, but without success. How to correctly write a trigger that, after entering data in the second table in the MOVING_QUANTITY attribute, automatically subtracted SP_PRODUCT_QUANTITY from the first table from MOVING_QUANTITY in the second. And the new result was already recorded in SP_PRODUCT_QUANTITY. In other words, a replacement for the first. I wanted to implement an idea where, for example, I transfer a certain amount of goods and enter the quantity I need, and he took the quantity of a certain product from the warehouse table. Below I have given the tables, and my own trigger, but it does not work correctly as I wanted.
CREATE TABLE Storage_Prod_List
(
STORAGE_PROD_ID INT PRIMARY KEY IDENTITY(1, 1),
FK_SP_STORAGE_ID INT,
FK_SP_PRODUCT_ID INT,
SP_PRODUCT_QUANTITY INT NOT NULL
);
CREATE TABLE Moving_list
(
MOVING_ID INT PRIMARY KEY IDENTITY(1, 1),
MOVING_DATE DATE NOT NULL,
MOVING_PRODUCT INT,
MOVING_QUANTITY INT NOT NULL,
FROM_STORAGE INT,
TO_SHOP INT,
);
CREATE TRIGGER UpdateQuantity
ON Moving_list
AFTER INSERT
AS
BEGIN
UPDATE st
SET SP_PRODUCT_QUANTITY = SP_PRODUCT_QUANTITY - (SELECT MOVING_QUANTITY FROM Moving_list)
FROM Storage_Prod_List st
JOIN (SELECT MOVING_ID, SUM(MOVING_QUANTITY) AS Quantity FROM INSERTED GROUP BY MOVING_ID) i ON st.STORAGE_PROD_ID = FK_SP_PRODUCT_ID
END;
I've been sitting here for days, but I can't think of anything.
The result I want to achieve:
| FK_SP_STORAGE_ID | FK_SP_PRODUCT_ID | FK_SP_PRODUCT_ID |
|---|---|---|
| Storage-1 | Coco-cola | 500 |
| Storage-1 | Fanta | 500 |
| MOVING_PRODUCT | MOVING_QUANTITY |
|---|---|
| Coco-cola | 400 |
| Fanta | 400 |
Result:
| FK_SP_STORAGE_ID | FK_SP_PRODUCT_ID | FK_SP_PRODUCT_ID |
|---|---|---|
| Storage-1 | Coco-cola | 100 |
| Storage-1 | Fanta | 100 |