Rah*_*dam 3 trigger sql-server c#
我有一个有 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 - newvalue
END
END
Run Code Online (Sandbox Code Playgroud)
BEFORE
SQL Server 中没有触发器。一个INSTEAD OF
触发器可以用来提供类似的功能,但触发代码将需要执行UPDATE
。
但是,AFTER
这里可以使用触发器,通过使用INSERTED
(新)和DELETED
(旧)虚拟表来获取计算所需的值。下面的示例假设主键列的名称StockID
无法更改。
CREATE TRIGGER [dbo].[Price_Modified]
ON [dbo].[STOCK]
AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
UPDATE s
SET value = new.price * (new.Qty - old.Qty)
FROM STOCK AS s
JOIN inserted AS new ON new.StockID = s.StockID
JOIN deleted AS old ON old.StockID = s.StockID
WHERE new.Qty <> old.Qty;
END;
GO
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32055 次 |
最近记录: |