2011-08-23 72 views
2

如果我開始一個事務,但從來沒有去調用COMMIT。數據會發生什麼? 我有一個小型的數據庫(說一百萬左右的SKU的)..我輸出它的1024偶數小塊(第三方約束限制我的文件大小)。
我必須標記已經輸出的記錄。SQL開始事務沒有提交

例如。更新產品set exported = 1,其中sku ='1234';

現在每隔一段時間我有一個問題,崩潰的第三方文件寫作工具。 但是,這種情況發生在創建給定記錄的文件之前。

所以我在想,如果我在更新記錄之前調用開始事務,並且只有在我確認文件已經建好之後才提交。

這可能會導致一些沒有雙胞胎的開始交易。

所以有兩個問題..有沒有更好的方法? (除了擺脫越野車第三方) 或者是從未提交過的交易的一部分記錄會發生什麼?

回答

4

您的事務處於鎖定狀態,直到連接完全關閉(不僅僅是返回到連接池)。這是壞

做一個更新不明確的事務和管理1024排塊,做這樣的事情

UPDATE TOP (1024) 
    Products 
SET 
    exported = 1 
OUTPUT 
    INSERTED.* 
WHERE 
    exported = 0; 

您可以修改此使用具有「處理」,「出口」狀態欄等你知道什麼時候的東西被讀取,但沒有導出

+0

我唯一的問題是,我不知道我已經導出記錄,直到文件被寫入。我想我可以創建一個「聲明」表,然後在最後階段將數據從聲明中推送到HD。感謝您的交易信息。 – baash05