2015-09-01 124 views
2

我需要知道如何爲以下情形執行觸發器執行。在批量更新中執行SQL Server觸發器

我在表中有20條記錄,我在該表上有一個AFTER INSERT, UPDATE觸發器。當我使用MERGE或批更新語句更新該表中的所有記錄時,觸發器將如何執行?

它是否爲每行逐行執行?

或者它每批次執行一次(所有20條記錄都執行一次)?

如果每個批次執行一次,我們需要在觸發器內編寫一個循環來執行每行的任務嗎?

+0

通常,您應該儘量避免在SQL中編寫循環 - 自然的工作方式是以* sets *行爲單位。在其他任何地方,觸發器都是如此。 –

回答

4

觸發器在SQL Server 總是執行每批一次 - 有一個爲「每一行」在SQL Server不再觸發選項。

當你大規模更新表格,觸發將立即在inserteddeleted僞表收到所有更新的行,需要進行相應的處理他們 - 爲一個組數據 - 不是一個單一的行

+0

然後如果我需要將更新的數據寫入另一個表,如果我寫入'Insert Into SomeTable SELECT * FROM UPDATED',它會將所有更新的數據複製到另一個表中嗎? @marc_s – tarzanbappa

+1

@tarzanbappa:差不多 - 觸發器有兩個「僞」表 - 「插入」和「刪除」。對於'UPDATE'語句,'deleted'包含舊值(在'UPDATE'之前),'inserted'包含新值。沒有'更新的'僞表 –

+0

對不起,我錯了,所以如果它是'插入到SomeTable SELECT * FROM DELETED',它會複製所有更新的數據到另一個表嗎? @marc_s – tarzanbappa