我想從nservicebus處理程序調用我的MS SQL存儲過程,我不知道我是否還需要使用像NServiceBus處理程序和存儲過程調用。我應該使用SET XACT_ABORT ON還是TRY CATCH?
CREATE PROCEDURE [DBO]。[proc_fd_SomeEntitySyncRawWithStage]
AS BEGIN
BEGIN TRY
BEGIN TRANSACTION
-- Batch of inserts and updates that I want to keep transactional
COMMIT TRANSACTION;
END TRY BEGIN CATCH
回滾事務;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
END CATCH; END
我真的需要這一切TRY BEGIN TRAN ... CATCH ROLLBACK ..或SET XACT_ABORT ON ...東西回滾我的交易或NServiceBus將回滾它在消息處理任何SQL異常的情況?
P.S. 牢記:
「如果一個運行時語句錯誤(如違反約束),在批處理時,數據庫引擎的默認行爲是回滾只產生錯誤的語句」
和
「當SET XACT_ABORT爲OFF時,在某些情況下,僅引發錯誤回滾的Transact-SQL語句和交易繼續進行處理。」
讀取與SET XACT_ABORT相關的文檔時,應將其保留爲ON。從NServiceBus的角度來看,消息處理處理被封裝在一個事務中(根據傳輸可以分發),這意味着每個錯誤都會回滾TX。考慮到我會說BEGIN/END和TRY/CATCH語句不是必需的。不是SQL大師,我真誠地不知道批處理會發生什麼。 – 2015-01-26 16:23:35