내가 nservicebus 핸들러에서 내 MS의 SQL 저장 프로 시저를 호출하고 싶은 나는 아직도 PROCEDURE [dbo가]를 만들NServiceBus 처리기 및 저장 프로 시저 호출 SET XACT_ABORT ON 또는 TRY CATCH를 사용해야합니까?
같은 것을 사용할 필요가 궁금. proc_fd_SomeEntitySyncRawWithStage]
AS
시작 BEGIN TRANSACTION BEGIN
TRY
-- Batch of inserts and updates that I want to keep transactional
COMMIT TRANSACTION;
END 는 CATCH
롤백 트랜잭션을 BEGIN TRY;
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. 명심하십시오 :
"배치 제약 조건 위반과 같은 런타임 문 오류가 발생하는 경우 데이터베이스 엔진의 기본 동작은"
"오류를 생성 한 문만 롤백하는 것입니다및
는 "SET XACT_ABORT가 롤백 오류를 제기, 일부의 경우에만 Transact-SQL 문이 OFF 때 트랜잭션 처리를 계속합니다."
SET XACT_ABORT와 관련된 문서를 읽으면 ON으로 설정해야합니다. NServiceBus의 관점에서 볼 때 메시지 처리 처리가 트랜잭션 (전송에 따라 다름)에 래핑되므로 각 오류가 TX를 롤백합니다. BEGIN/END 및 TRY/CATCH 문은 필요 없다고 가정하면됩니다. SQL 전문가가 아니기 때문에 일괄 처리가 어떻게 될지 진심으로 모릅니다. –