2014-08-28 88 views
0

如何創建更新同一表中不同列時更新表中的列的觸發器。創建一個觸發器,用於在同一表中的不同列更新時更新表中的列 - SQL

到目前爲止,我已經完成了以下工作,當任何新的數據被創建。它能夠將數據從「採購申請單」複製到「PO_Number」,但是當「採購申請單」中的數據已被修改時,不會更改「PO_Number」,並且該值爲NULL。任何形式的幫助將被認真感謝。

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select Purchase_Requisition from inserted) where DocNo= (Select DocNo from inserted); 
    END 
+3

您的觸發器不是批處理安全的...... – 2014-08-28 14:19:19

回答

0

這可能會做你想要什麼: 你觸發改變的TheCat2所有行。想必,你只需要改變新:

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] AFTER INSERT 
AS 
BEGIN 
    UPDATE tc 
     SET PO_Number = Purchase_Requisition 
     FROM dbo.TheCat2 tc JOIN 
      inserted i 
      on tc.DocNo = i.DocNo ; 
END; 

不過,或許是一個計算列足以滿足您的目的:

alter table add PO_Number as Purchase_Requisition; 
+0

非常感謝。感謝所有的幫助。我很高興我總是可以在這裏學到新東西.. – James 2014-08-28 14:53:27

1

你需要「更新」以及插入添加到觸發器,否則它只會對新數據執行,而不會更新數據。還在插入的表格的select語句中添加了「top 1」,以便對批量更新進行「安全」處理,但它只會更新1條記錄。

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT, UPDATE 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select top 1 Purchase_Requisition from inserted) where DocNo= (Select top 1 DocNo from inserted); 
END 
+0

非常感謝你,在SQL腳本中很新鮮,並感謝你的幫助。總是樂於學習新東西。 – James 2014-08-28 14:53:03

相關問題