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

TRANSACTIONS Call Stored Procedure of another database

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

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

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

如果发生什么情况:

如果您使用 WCF-Custom,例如使用 sqlBinding,您可以在 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 可用性组,这将得到支持并按预期工作。