2012-01-19 82 views
0

我遇到以下問題:我在表A上有一個觸發器,其目的是計算一些值並將它們插入到完全不同的表B中。 問題是在那個邏輯的某個地方,有一個循環需要將新鮮插入到表B中的值。 我注意到SQL Server在退出觸發器後立即執行所有INSERT命令。在不同的表中讀取由觸發器插入的值

ALTER TRIGGER [dbo].[InsertTrade] 
ON [dbo].[Blotter] 
AFTER INSERT 
AS 
BEGIN 

/* compute @Variables */ 

INSERT INTO [dbo].[CompletelyUnrelatedTableWithoutTriggersOnIt] 
VALUES @Variables 

是否存在的COMMMIT -ing是INSERT,並且能夠在觸發讀取這些值,同時還什麼辦法?

感謝, D.

回答

1

首先,要非常小心你如何構建你的扳機。如果您在觸發器中使用INSERT...VALUES(),則表明您假設INSERTED表中只有一條記錄。永遠不要做這個假設。相反,你的邏輯應該是INSERT...SELECT <computed cols> FROM INSERTED

第二,如果你想離開你只是把這些值,你可以使用OUTPUT條款,但我不知道這是你的意思(它不是完全清楚你要什麼那麼你將有權訪問插入的最終值「仍然在觸發器中」

如果這是而不是你想要什麼,也許最好是將所有這些功能封裝到一個proc中。

+0

嗨,感謝您的快速回答。關於你的第一點,我只插入變量,即:INSERT ... VALUES(@ FirstVar,@ SecondVar,...,@ NthVar) 基本上,我想要的是以下內容: 1.當插入新行時在表A 中2.使用來自表A和表B的值並在表B中插入新行的運行觸發器 3.如果滿足一些條件,觸發器可能必須在表B中插入2行或更多行。對於插入表B中的第二行,部分由在第2步​​插入的第一個/前一行確定。 我需要讀取以前寫入的值,但它們不在那裏 – user1158959

+0

我希望前面的解釋有助於減少在我的問題 – user1158959

+0

更多的光,所以如果你插入三個記錄到表A你只想執行一個插入到表B(或者你有)無論哪種方式,OUTPUT可能是你最好的選擇,它可以讓你在觸發器中使用插入值到B中。 –

相關問題