Domanda

I have a table with different prices for each item. Each item have prices 0, 1, 2, 3. I need to change price 3 when price 0 is changed. Price 3 = Price 0 + 20%. I made this trigger:

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

It turns out that when I run an UPDATE via SQL query directly, everything runs perfectly. But when the price 0 is updated via ERP nothing happens. Anyone have any ideas? (MS SQL Server) It seems that the trigger does not fire when the update is done via ERP system.

È stato utile?

Soluzione

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

Without Temp Table

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top