【发布时间】:2014-09-29 19:37:28
【问题描述】:
我正在寻找有关针对数据库的交易的一些说明。
我有一个从 .NET 应用程序调用的存储过程。存储过程被包装在一个带有开始事务和提交/回滚的 Try-Catch 中。在 try-catch 内部最多有四个可能的其他存储过程被调用,它们对表进行更新/插入。我相信这些存储过程也包含在带有开始事务和提交/回滚的 try-catch 中。
如果这四个 sproc 中的任何一个在插入/更新时发现错误,我想回滚所有内容,但由于所有 sproc 都单独包装在它们自己的 try-catch 中,并带有 begin tran 和 commit/rollback tran 基本上不会一次一个 sproc 完成了它提交的调用,但如果第二个失败,第一个不会回滚。 这是它的工作方式吗? 被调用的主存储过程如下所示:
BEGIN TRY
BEGIN TRANSACTION
EXEC dbo.test_call1 @AccountName
EXEC dbo.test_call2 @accountNbr,@person
EXEC dbo.test_call3 @person,@order
EXEC dbo.test_call4 @order,@quantity
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
test_call1 与此类似:
BEGIN TRY
BEGIN TRANSACTION
BEGIN
INSERT INTO dbo.Account
(AccountName,AccountNumber,Source)
VALUES
(@AccountName,123456,'online' )
END
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END
【问题讨论】:
标签: sql transactions try-catch