Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 触发执行_Sql Server_Triggers - Fatal编程技术网

Sql server 触发执行

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

我有一张桌子,每种商品都有不同的价格。每种商品的价格分别为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,
    @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