与此问题相关:Executing a stored procedure inside BEGIN/END TRANSACTION
我通过BizTalk调用我的存储过程。因为BizTalk正在创建TRANSACTION,所以我的存储过程没有TRANSACTION处理。但是,我必须调用BizTalk调用的另一个存储过程。但是,针对同一MSSQL实例中的另一个数据库调用第二个存储过程。
MS SQL是否知道此跨数据库过程调用并且还回滚了第二个存储过程?
如果出现以下情况:
答案 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可用性组那样使用任何异常,则支持并按预期工作。