我正在使用本地數據庫中的記錄更新遠程服務器上的大量項目的過程。這是僞代碼。存儲過程中循環內的事務
CREATE PROCEDURE UpdateRemoteServer
pre-processing
get cursor with ID's of records to be updated
while on cursor
process the item
無論多少,我們對其進行優化,程序將需要一段時間,所以我們不希望這件事被處理成一個單一的交易。這些項目在處理後會被標記,所以如果過程中斷,應該有可能從中斷。
包裝紙循環的內容(「處理項目」)在開始/提交TRAN不會做的伎倆...看來,整個陳述
EXEC UpdateRemoteServer
被作爲單個事務處理。我怎樣才能使每個項目的過程作爲一個完整的,單獨的交易?
注意,我很想來運行這些爲「非事務性更新」,但選項僅可(據我所知)於2008年
感謝您的信息。這實際上回答了這個問題。除此之外,我知道遊標吸吮。在這種情況下,它不是導致性能問題*的本身*,而是在循環內完成工作。但這是一個單獨的問題。 – harpo 2009-10-08 18:09:02
我不同意「遊標吸」,但這是一個不同的討論。 – Thorsten 2009-10-08 18:09:33
@IronGoofy:你是對的;遊標是一種專門的工具,應該用在專門的環境中(有點像螺旋提取器;你不需要每天都這樣做,如果你這樣做,你就會做錯事)。說「他們吸」更容易。 :) – 2009-10-08 18:13:22