我有一个有 4 列的表qty,qtydiff,price和value。
我想要after update trigger在 qty 行值更改(多于一行)时触发。
该Before trigger应阅读,并从数量存储旧值和触发后应从新的价值上减去旧值qty列,在得到差值qtydiff繁衍与price列和更新的结果在value列。
下面的代码只是我还没有测试过的概念代码,我不确定它是否有效,但是有没有办法让更新前后在同一个触发器中工作?
CREATE TRIGGER [dbo].[Price_Modified]
ON [dbo].[STOCK]
BEFORE UPDATE ON STOCK
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
SELECT qty
FROM STOCK
END
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
UPDATE Stock
SET value = price * qtydiff
FROM STOCK
WHERE qtydiff = oldvalue - …Run Code Online (Sandbox Code Playgroud) 我有一个 textBox 的值为 100,我想在 stock_out 列中增加该值,但只有直到 stock_out 列等于 stock_in 列,如果第一行值是 40 比第一行 stock_out 应该从 100 增加 10 比100(90) 的剩余值应在其下方的行中递增,然后在其下方的行中递增,直到需要为止(直到 100 为 0)。项目按 Item_Name 和 Bill No asc 排序。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 40 10
2 chicken 40 0 40
5 chicken 60 10 50
6 chicken 100 20 80
3 fish 100 30 70
4 fish 20 20 0
Run Code Online (Sandbox Code Playgroud)
要得到的结果。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 50 0
2 chicken 40 40 …Run Code Online (Sandbox Code Playgroud) 第一次触发
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 …Run Code Online (Sandbox Code Playgroud)