2015-08-19 72 views
-1

我在我的表上觸發了一個觸發器,它會觸發任何行的更新。在sql server中觸發器不會被多次觸發

我在我的表中有10行。

我正在更新存儲過程中某些條件的所有行。

我看到我的觸發器只觸發了一次。

但我需要爲每一行的每次更新運行觸發器。

你能幫我解決這個問題嗎?

+1

一個觸發器執行每個語句,而不是每行,你得到的元表包含受影響的行的'INSERTED'和'DELETED',你不會得到每行執行的觸發器。 –

回答

0

在您的觸發器中,您有一張表INSERTED,其模式與觸發表相同,您可以在其中找到所有插入/更新的10行。你可以這樣做批處理。其他方法,你可以迭代這個臨時表來做單一的治療。

+0

但我在觸發器中插入和刪除了很多表達式和條件。他們有任何其他方式來做到這一點? – user2366302

+0

你是什麼意思批處理?我們試圖通過使用插入表進行迭代。但是我必須在這裏修改大量的邏輯。 – user2366302

+0

您可以用'CURSOR'或循環遍歷INSERTED表,並調用存儲過程或UDF。我不知道有任何方法可以在一個'UPDATE'中多次調用光標。調用存儲過程10次或接收觸發10次有什麼不同? – stephanejulien

0

當你在這個問題上尋求'幫助'時,我會試着指出你可能更好的方向。你的問題表明你可能缺乏關於SQL的重要知識。爲了彌補,你應該閱讀:

http://www.codeproject.com/Articles/34142/Understanding-Set-based-and-Procedural-approaches

這是所有程序的方法相比,基於集的方法。看起來對我來說很有幫助。我想強調這個摘錄:

的數據庫內部執行引擎的設計和採取「一套基於指令」作爲輸入(SQL),並執行這些指令 以最好的方式優化 (即基於不同而不同在很多 標準)來產生輸出。這就是爲什麼「基於集合的方法」幾乎總是更好的選擇。

這就是說,我相信它不僅是性能,而且我相信你應該修復你的設計。

或者,仍然有使用遊標的情況。你能否更具體一些,並提供更多關於你的情況的信息?