2012-08-28 18 views
2

我在爲我的一個表寫入觸發器。我想要做的是,我想用其中一個插入的字段更新另一個表列。在觸發器中使用插入的值

CREATE TRIGGER [dbo].[Trigger_TestTrigger] 
ON [dbo].[TableA] 
FOR INSERT 
AS 

BEGIN 
    SET NoCount ON 
    DECLARE @variable UNIQUEIDENTIFIER 
    SELECT @variable = TableB.colA1 FROM TableB WHERE (TableB.colB1 = INSERTED.colA1) 
    IF (@variable != INSERTED.colA2) 
    BEGIN 
     UPDATE TableB SET colB4 = INSERTED.colA2 WHERE TableB.colB1 =INSERTED.colA1 
    END 
END 

但是,當創建此觸發器到數據庫時,它會給出錯誤。 錯誤是:

"INSERTED.colA1" could not be bound. 
"INSERTED.colA2" could not be bound. 

正常插入具有被剛插入的valuse。那麼,我應該如何獲得我已經插入表格「TableA」的值。如果插入不能像這樣使用,那麼執行此操作的正確方法是什麼?

回答

4

你應該把插入像任何其他表

SELECT @variable = TableB.colA1 
FROM TableB 
    inner join inserted ON TableB.colB1 = INSERTED.colA1 

注意inserted可能包含多個行,所以這實際上並不會提供你想要的所有的結果的時候

+0

那麼,有沒有更好的方法來做到這一點。獲取剛剛插入的值到數據庫。因爲我必須更新其他表格。而且在我的更新中,我還必須使用插入。 intellisence也不會給任何插入的字段。 :( –

+1

使用單個UPDATE查詢連接到插入並將INSERTED.colA2與TableB.colA1進行比較 – podiluska

2

你應該將INSERTED作爲表格來處理。