我有一個(SQL 2005)存儲過程,它處理一個巨大的表並將過去的數據(直到一年前)分組。它有這個主要步驟:分組到新表帶有日誌記錄和錯誤處理的SQL Server 2005存儲過程
- 複製舊的數據
- 複製近期數據是新表
- 重命名錶
現在我想記錄每一次運行並記錄日誌表中的每一步。不過,我從一開始就開始一個事務,這樣如果出現問題,我可以回滾整個批處理。但是,這也會回滾我的日誌,這不是我想要的。
我該如何解決這個問題?
我有一個(SQL 2005)存儲過程,它處理一個巨大的表並將過去的數據(直到一年前)分組。它有這個主要步驟:分組到新表帶有日誌記錄和錯誤處理的SQL Server 2005存儲過程
現在我想記錄每一次運行並記錄日誌表中的每一步。不過,我從一開始就開始一個事務,這樣如果出現問題,我可以回滾整個批處理。但是,這也會回滾我的日誌,這不是我想要的。
我該如何解決這個問題?
記錄到一個表變量,因爲這不會回滾事務,然後在過程結束後,在提交或回滾之後,將表變量的內容插入到永久記錄表中。
然後,您可以簡單地記錄您的CATCH塊中的錯誤。這裏
例(可以添加自己的日誌記錄):Nested stored procedures containing TRY CATCH ROLLBACK pattern?
就個人而言,我覺得這比使用表變量更優雅。
會帶來一些進一步的步驟,但不是有致命的錯誤,可以關閉整個過程,讓我不能控制堅持日誌表變量? – Koen
@Koen - 如果你需要迎合這個(例如高嚴重錯誤終止連接),我只能建議記錄事件日誌或跟蹤(使用[用戶可配置的SQL Server Profiler事件](http:///weblogs.sqlteam.com/mladenp/archive/2008/10/16/Custom-user-configurable-SQL-Server-Profiler-events.aspx)) –