Sql server 触发执行
我有一张桌子,每种商品都有不同的价格。每种商品的价格分别为0,1,2,3。当价格0更改时,我需要更改价格3。价格3=价格0+20%。我扣动了这个扳机:Sql server 触发执行,sql-server,triggers,Sql Server,Triggers,我有一张桌子,每种商品都有不同的价格。每种商品的价格分别为0,1,2,3。当价格0更改时,我需要更改价格3。价格3=价格0+20%。我扣动了这个扳机: CREATE TRIGGER trg_PG_Change_Price3 ON ItemSellingPrices AFTER UPDATE AS BEGIN DECLARE @Item NVARCHAR(25), @CostPrice FLOAT; SELECT @Item = ItemID, @Cos
CREATE TRIGGER trg_PG_Change_Price3
ON ItemSellingPrices
AFTER UPDATE
AS
BEGIN
DECLARE
@Item NVARCHAR(25),
@CostPrice FLOAT;
SELECT
@Item = ItemID,
@CostPrice = UnitPrice
FROM
inserted
WHERE PriceLineID = 0
UPDATE ItemSellingPrices
SET UnitPrice = @CostPrice*1.2
WHERE ItemID = @Item AND PriceLineID = 3
END
事实证明,当我直接通过SQL查询运行更新时,一切都运行得很好。但是当价格0通过ERP更新时,什么也没有发生。有人有什么想法吗?MS SQL Server
当通过ERP系统进行更新时,触发器似乎不会触发
CREATE TRIGGER trg_PG_Change_Price3
ON ItemSellingPrices
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
SELECT i.ItemID, i.UnitPrice INTO #temp
FROM inserted i INNER JOIN deleted d
ON i.ItemID = d.ItemID
WHERE i.PriceLineID = 0
AND i.UnitPrice <> d.UnitPrice
UPDATE T
SET T.UnitPrice = i.UnitPrice * 1.2
FROM ItemSellingPrices T INNER JOIN #temp i
ON T.ItemID = i.ItemID
WHERE T.PriceLineID = 3
END
不带临时表
我很抱歉@m.Ali,但两者的结果相同…你能展示一些样本数据和期望的输出吗,我看不出这段代码有任何错误,也许样本日期将有助于更好地诊断。我认为这段代码是完美的。当我通过SQL进行更新时,比如:updateitemsellingpricessetunitprice=6500,其中ItemID='0012'和PriceLineID=0,我有一个价格3和7800。但问题是,当我通过我的ERP系统进行更改时,什么都没有发生……那么你需要检查一下你的ERP系统。很抱歉,我无法帮助您:如果答案有帮助,您可以接受它,谢谢。在这种情况下,您需要调整您的ERP系统设置,也许它会在发布更新声明时关闭任何触发器。我无意将此问题从主题中删除,或在信息很少的情况下删除。事实上,当我的ERP系统更改了表格并且不知道如何接近主题时,我无法激活此触发器。对不起…我发现我的问题了!每次我改变价格0,ERP升级所有价格。因此,在更改价格0后触发,但价格3再次被ERP取代。我改变了扳机来改变价格3,当他自己改变了,它成功了!很抱歉,我发布了这个问题,但我几乎没有经验认为这是触发器设计中的一个缺陷,但我只需要更好地了解ERP的内部工作原理,并相应地制作触发器。无论如何,谢谢大家。
CREATE TRIGGER trg_PG_Change_Price3
ON ItemSellingPrices
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE T
SET T.UnitPrice = i.UnitPrice * 1.2
FROM ItemSellingPrices T
INNER JOIN ( SELECT i.ItemID, i.UnitPrice
FROM inserted i INNER JOIN deleted d
ON i.ItemID = d.ItemID
WHERE i.PriceLineID = 0
AND i.UnitPrice <> d.UnitPrice
) i
ON T.ItemID = i.ItemID
WHERE T.PriceLineID = 3
END