TRANSACTIONS调用另一个数据库的存储过程

时间:2017-07-19 23:02:58

标签: sql-server stored-procedures transactions sql-server-2014 biztalk

与此问题相关:Executing a stored procedure inside BEGIN/END TRANSACTION

我通过BizTalk调用我的存储过程。因为BizTalk正在创建TRANSACTION,所以我的存储过程没有TRANSACTION处理。但是,我必须调用BizTalk调用的另一个存储过程。但是,针对同一MSSQL实例中的另一个数据库调用第二个存储过程。

MS SQL是否知道此跨数据库过程调用并且还回滚了第二个存储过程?

如果出现以下情况:

  • 跨数据库存储过程失败了吗?
  • 外部存储过程在调用交叉数据库存储过程后失败了吗?

1 个答案:

答案 0 :(得分:2)

例如,如果您使用sqlBinding使用WCF-Custom,则可以在WCF适配器配置中指定TRANSACTION ISOLATION LEVEL。当然,您可以将其设置为所需的状态。

仅供参考:默认情况下,BizTalk服务器中的此设置是Serializable隔离级别。

实际上,在使用事务时,您的WCF适配器将启动分布式事务,并且本质上支持跨数据库甚至跨服务器的事务。根据您在SQL中的确切操作,可能支持也可能不支持。例如,通过某些提供商的某些有限链接服务器不支持它。

另一个例子是AlwaysOn可用性组中的跨数据库事务支持,包括SQL Server 2016.(解释:https://blogs.msdn.microsoft.com/alwaysonpro/2014/01/06/not-supported-ags-with-dtccross-database-transactions/) 据说,从SQL Server 2017开始支持这种(AlwaysOn AG'中的跨数据库事务)。

TLDR;如果您使用的是分布式事务,并且没有像遗留链接服务器提供程序或AlwaysOn可用性组那样使用任何异常,则支持并按预期工作。