Eigenlijk start ik nooit een nieuwe transactie als ik er al een heb.
Dit gaat over geneste opgeslagen processen, gedistribueerde TXN's en TransactionScope
Onthoud, er is niet zoiets als een geneste transactie in SQL Server hoe dan ook.
DECLARE @StartTranCount int
BEGIN TRY
SET @StartTranCount = @@TRANCOUNT
IF @StartTranCount = 0 BEGIN TRAN
-- my code
IF @StartTranCount = 0 COMMIT TRAN
END TRY
BEGIN CATCH
IF @StartTranCount = 0 AND @@trancount > 0
BEGIN
ROLLBACK TRAN
DECLARE @message NVARCHAR(MAX)
DECLARE @state INT
SELECT @message = ERROR_MESSAGE(), @state = ERROR_STATE()
RAISERROR (@message, 11, @state)
END
/*
or just
IF @StartTranCount = 0 AND @@trancount
ROLLBACK TRAN
*/
END CATCH