【发布时间】:2013-10-03 08:16:05
【问题描述】:
我阅读了这个 Stackoverflow 问题 Nested stored procedures containing TRY CATCH ROLLBACK pattern?
我需要澄清 gbn 已回答的交易模板。 我不能在那里发表评论和提问。
CREATE PROCEDURE [Name]
AS
SET XACT_ABORT, NOCOUNT ON
DECLARE @starttrancount int
BEGIN TRY
SELECT @starttrancount = @@TRANCOUNT
IF @starttrancount = 0
BEGIN TRANSACTION
[...Perform work, call nested procedures...]
IF @starttrancount = 0
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 AND @starttrancount = 0
ROLLBACK TRANSACTION
RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
GO
我的问题是!
为什么要使用?
SELECT @starttrancount = @@TRANCOUNT ,而不是直接使用@@TRANCOUNT??
为什么要检查这个?
如果@starttrancount = 0 开始交易
如果@starttrancount = 0 提交交易
我是 transaction 新手,举例说明会很有帮助。 谢谢:)
【问题讨论】: