如何使一个事务涵盖多个存储过程?

4

我需要在单个数据库的单个事务中包含多个存储过程,如果任何一个存储过程失败,则回滚所有在范围内处理的存储过程的事务。

我使用的是SQL-SERVER 2008。

4个回答

5
begin transaction
begin try
  exec proc_1
  exec proc_2
  exec proc_3
  commit transaction
end try
begin catch
  rollback transaction
end catch

1
你需要在这里展开错误处理,并且一直测试它直到你厌倦为止。糟糕的“事务控制”可能会产生真正可怕的结果。 - Philip Kelley
确实 - 我的简单示例不会将错误报告回调用应用程序。 - Ray

2

您可以创建一个存储过程来开始一个事务,然后调用其他存储过程。如果其中任何一个内部存储过程失败,您可以回滚事务。如果您告诉我们您正在使用哪个数据库平台(MS SQL Server、MySQL等),人们可能会提供更具体的解决方案。


请查看http://www.4guysfromrolla.com/webtech/080305-1.shtml。该示例调用了几个SQL语句,但您也可以轻松地调用其他存储过程。 - TLiebe

1

如果事务可以完全“包含”在一个数据库服务器实例中,为了简单起见,我会在该数据库调用中实现它。只有在必须涵盖数据库外的工作时,我才会在数据库外部实现它。 - Philip Kelley
我并不反对你的说法,但有些人更喜欢使用ORM框架或类似的工具,并希望尽可能少地使用数据库对象。 - Gratzy

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接