दरअसल, अगर मैं पहले से ही लेन-देन कर रहा हूं, तो मैं कभी भी कोई नया लेन-देन शुरू नहीं करता।
यह नेस्टेड संग्रहित प्रोसेस, वितरित TXNs और TransactionScope
. से संबंधित हैयाद रखें, SQL सर्वर में नेस्टेड ट्रांजैक्शन जैसी कोई चीज नहीं है वैसे भी।
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