1

与此相关的问题的过程:Executing a stored procedure inside BEGIN/END TRANSACTION交易调用存储的另一个数据库

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

MS SQL是否意识到这个跨数据库过程调用并执行第二个存储过程的回滚?

  • 的跨数据库存储过程失败:

    如果会发生什么?

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

回答

2

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

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

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

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

TLDR;如果您正在使用分布式事务并且未使用任何异常情况(如传统链接服务器提供程序或AlwaysOn可用性组),则可以按预期方式进行操作。

+1

是否仅在接收位置上提供transactionIsolationLevel设置,并且只能通过添加sqlAdapterInboundTransactionBehavior行为? https://msdn.microsoft.com/en-us/library/dd788041.aspx – Dijkgraaf

+0

更正接收位置​​是唯一可用的方式,包括“环境事务”的设置。我确信这是关于发送端口的,因此我没有提到这一点,所以非常好! –

+0

很好的解释。所以我们有AlwaysOn的SQL Server 2014。所以我的跨数据库程序不支持事务处理,对吗? – Mario

相关问题