Rah*_*dam 1 sql-server sql-server-2014
第一次触发
ALTER TRIGGER [dbo].[Price_Modified]
ON [dbo].[stock_recieve]
AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Stock_out)
BEGIN
UPDATE s
SET value = new.Item_Price * new.Stock_out
FROM stock_recieve AS s
JOIN inserted AS new ON new.[Bill No] = s.[Bill No]
JOIN deleted AS old ON old.[Bill No] = s.[Bill No]
END;
Run Code Online (Sandbox Code Playgroud)
第二个触发器。
ALTER TRIGGER [dbo].[newval]
ON [dbo].[stock_recieve]
AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Stock_out)
BEGIN
UPDATE s
SET Uservalue = new.Item_Price * new.Stock_out
FROM stock_recieve AS s
JOIN inserted AS new ON new.[Bill No] = s.[Bill No]
JOIN deleted AS old ON old.[Bill No] = s.[Bill No]
END;
Run Code Online (Sandbox Code Playgroud)
第一次 stock_out 更新时获得的结果。
| Item_Price | Stock_in | Stock_out | Value | Uservalue |
|------------|----------|-----------|-------|-----------|
| 50 | 200 | 100 | 5000 | 5000 |
| 100 | 50 | 20 | 2000 | 2000 |
| 30 | 100 | 40 | 1200 | 1200 |
Run Code Online (Sandbox Code Playgroud)
在第二次 stock_out 更新时获得的结果。
| Item_Price | Stock_in | Stock_out | Value | Uservalue |
|------------|----------|-----------|-------|-----------|
| 50 | 200 | 200 | 10000 | 5000 |
| 100 | 50 | 40 | 4000 | 2000 |
| 30 | 100 | 100 | 3000 | 1800 |
Run Code Online (Sandbox Code Playgroud)
第一个触发器执行其假设的操作,但我希望 Uservalue 上的第二个触发器不添加而是替换结果。希望这很清楚@Ypercube
您应该使用计算列而不是使用触发器。
这样,stock_out 的任何变化都会影响用户评分。
它将自动计算,并且没有重复的行。
然后可以使用 AFTER UPDATE TRIGGER 来存储先前用户评分的记录,方法是从 DELETED 读取数据并将其插入到审计表中。
归档时间: |
|
查看次数: |
981 次 |
最近记录: |