2013-09-26 97 views
-2

假設我有一個表MYTAB:觸發插入更多的行比它應該

MyTab(ID, Col1, Col2, Col3,...) 

然後創建了一個刪除觸發器,如:

CREATE TRIGGER [dbo].[trg_MyTab_Delete] 
ON [dbo].[MyTab] 
For DELETE AS 
begin 

    INSERT INTO dbo.DeleteHistory(...) 
    SELECT * FROM deleted d; 

end 

爲單行數據刪除這工作得很好。但它不會批量刪除工作像

delete from MyTab where ... 

如果上述刪除MyTab刪除10行,觸發器會插入10 * 10 = 100行到DeleteHistory

如何解決這個問題,使這個觸發器適用於單行和多行刪除?

+3

該觸發器實際上已經看起來像它應該處理多行刪除就好了。你確定這正是你的觸發器的樣子嗎?如果不同,我們無法解決我們看不到的問題。 –

+3

我懷疑你的實際觸發器說'INSERT ... SELECT d。* FROM deleted d,deleted'或'FROM deleted d,MyTab WHERE d.key = MyTab.key'。 –

回答

0

它應該正常工作。看到這個SQL小提琴的演示: http://sqlfiddle.com/#!6/90f47/3/2

你還有什麼可憎的事情發生。也許你沒有顯示實際的觸發代碼,也許你有其他觸發器正在運行或其他東西......很難猜到。