我是編程新手,我正在為自己做一個專案來鞏固材料。我嘗試了所有方法,但沒有成功。如何正確撰寫觸發器,在第二個表的 MOVING_QUANTITY 屬性中輸入資料后,自動從第二個表的 MOVING_QUANTITY 中減去 SP_PRODUCT_QUANTITY。并且新結果已經記錄在 SP_PRODUCT_QUANTITY 中。換句話說,第一個的替代品。我想實作一個想法,例如,我轉移一定數量的貨物并輸入我需要的數量,然后他從倉庫表中取出某種產品的數量。下面我給出了表格和我自己的觸發器,但它不能按我的意愿正常作業。
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;
我已經坐在這里好幾天了,但我什么都想不出來。
我想要達到的結果:
| FK_SP_STORAGE_ID | FK_SP_PRODUCT_ID | FK_SP_PRODUCT_ID |
|---|---|---|
| 存盤-1 | 可口可樂 | 500 |
| 存盤-1 | 芬達 | 500 |
| MOVING_產品 | MOVING_QUANTITY |
|---|---|
| 可口可樂 | 400 |
| 芬達 | 400 |
結果:
| FK_SP_STORAGE_ID | FK_SP_PRODUCT_ID | FK_SP_PRODUCT_ID |
|---|---|---|
| 存盤-1 | 可口可樂 | 100 |
| 存盤-1 | 芬達 | 100 |
uj5u.com熱心網友回復:
您在觸發器中參考了錯誤的列名。
您的加入條件錯誤。Moving_list您根本沒有加入該列
ON st.STORAGE_PROD_ID = FK_SP_PRODUCT_ID
您正在從 table中減去SP_PRODUCT_QUANTITY所有內容。當表格包含超過 1 行時會導致錯誤MOVING_QUANTITYMoving_listMoving_list
SET SP_PRODUCT_QUANTITY = SP_PRODUCT_QUANTITY
- (SELECT MOVING_QUANTITY FROM Moving_list)
子查詢應該按MOVING_PRODUCTnot分組MOVING_ID
GROUP BY MOVING_ID
更正后的觸發器:
CREATE TRIGGER UpdateQuantity
ON Moving_list
AFTER INSERT
AS
BEGIN
UPDATE st
SET SP_PRODUCT_QUANTITY = st.SP_PRODUCT_QUANTITY
- i.Quantity
FROM Storage_Prod_List st
JOIN (
SELECT MOVING_PRODUCT, SUM(MOVING_QUANTITY) AS Quantity
FROM INSERTED
GROUP BY MOVING_PRODUCT
) i ON st.FK_SP_PRODUCT_ID = i.MOVING_PRODUCT
END;
uj5u.com熱心網友回復:
您的表需要處于以下約束條件
CREATE TABLE Storage_Prod_List
(
STORAGE_PROD_ID INT IDENTITY(1, 1),
FK_SP_STORAGE_ID INT,
FK_SP_PRODUCT_ID VARCHAR(100) PRIMARY KEY,
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 VARCHAR(100) FOREIGN KEY REFERENCES Storage_Prod_List(FK_SP_PRODUCT_ID),
MOVING_QUANTITY INT NOT NULL,
FROM_STORAGE INT,
TO_SHOP INT
);
如我錯了請糾正我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/491696.html
上一篇:獲取日期期間
下一篇:獲取開始日期和結束日期
