2014-04-27 94 views
1

我有一個表格,每個項目的價格不同。每個項目都有價格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查詢直接運行UPDATE時,一切都運行完美。但是,當通過ERP更新價格0時,什麼都不會發生。有人有主意嗎? (MS SQL Server) 當通過ERP系統完成更新時,似乎觸發器不會觸發。

+0

我沒有服用問題出題目或很少信息的意圖。事實是,當我的ERP系統更改表格並且不知道如何處理主題時,我無法激活此觸發器。對不起... – PJLG

+0

我發現我的問題!每次我改變價格0,ERP升級所有價格。因此,在更改價格0後觸發器被觸發,但價格3再次被ERP取代。我改變了觸發器,以改變價格3,當他自己改變並且工作時!對不起,我發佈了這個問題,但我幾乎沒有經驗認爲是觸發器設計中的一個缺陷,但只能更好地理解ERP的內部工作原理並據此做出觸發。無論如何,謝謝你。 – PJLG

回答

0
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 

沒有臨時表

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 
+0

對不起@ M.Ali,但兩者都有相同的結果... – PJLG

+0

您能否顯示一些示例數據和所需的輸出,我沒有看到這段代碼有任何問題,可能示例日期將有助於更好地診斷它。 –

+0

這個代碼是完美的,我想。當我通過SQL進行更新時,例如:'UPDATE ItemSellingPrices SET \t \t單價= 6500 WHERE ItemID ='0012'和PriceLineID = 0'我有一個價格3與7800.但問題是當我通過更改通過我的ERP系統沒有任何反應...... – PJLG