2012-04-16 65 views
10

將插入語句放在具有「INSTEAD OF」觸發器的表上會導致無限的「插入」執行循環嗎?INSTEAD TRIGGER,它會無限循環嗎?

例如這樣的:

CREATE TRIGGER setDescToUpper ON part_numbers 
INSTEAD OF INSERT 

AS 
BEGIN 
    INSERT INTO part_numbers (
     colA, 
     colB, 
     part_description 
    ) SELECT 
     colA, 
     colB, 
     UPPER(part_description) 
    ) FROM 
     INSERTED 
END 
GO 

會內「而不是」的插入語句觸發器導致一個循環?

我不想禁用遞歸觸發器。

我是否需要暫時禁用觸發器?

來源:SQL Server - after insert trigger - update another column in the same table

回答

14

這INSERT不會重新調用該觸發。

SQL Server不會以遞歸方式調用INSTEAD OF觸發器,這正是您提出的原因。

+3

+1對,這是一個INSTEAD OF觸發器。 [MSDN says](http://msdn.microsoft.com/en-us/library/ms189799.aspx):「如果在表上定義的INSTEAD OF觸發器對通常會觸發INSTEAD OF觸發器的表執行語句同樣,該語句不會被遞歸調用,而是將該語句處理爲表中沒有INSTEAD OF觸發器,並啓動約束操作鏈和AFTER觸發器執行。 – Andomar 2012-04-16 17:09:12

+0

你能解釋一下在INSERT語句的情況下會發生什麼嗎? INSERT中的INSERT是否仍然執行? – 2012-04-16 18:42:55

+0

謝謝你們。指出。 – zunetastic 2012-04-17 07:03:35