1

背景: 我们有一个在 .NET framework 2.0 下开发的网站,它使用使用 Sql Server 2005 创建的数据库。我们还有一个在 .NET framework 4.0 下开发的网站,这个网站使用使用 Sql Server 2008 创建的数据库. 我们链接两个数据库(从 Sql Server 2005 到 Sql Server 2008)创建一个“Sql Server 2005 数据库上的链接服务器”。

场景: 当我们在 Sql Server 2005 中托管的数据库上创建记录时,我们有以下事务序列: 将记录插入到 Sql Server 2005 数据库中托管的表中。此插入在插入后执行触发器。在触发器内部,我们执行一个存储过程(托管在 Sql Server 2008 数据库中),这个存储过程是使用“链接服务器”执行的。此存储过程执行插入到托管在 Sql Server 2008 数据库中的表中。如果我们使用 Sql Server Management Studio 2005 手动执行插入到托管在 Sql Server 2005 数据库中的表中,一切都会很好地执行,但是如果我们尝试使用网站的 UI (.NET 2005) 创建记录,我们会得到这个错误:

当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务。

有谁知道发生了什么?

4

1 回答 1

0

我确实发现在触发器中执行此类代码非常冒险。我会考虑删除触发器并创建执行所述操作的过程。

为了正确测试所有内容,您应该在两台服务器上的一个事务中调用 DML 操作,或者您应该通过调用“开始分布式事务”显式地开始分布式事务。如果您只是在其他服务器上更新某些内容(仅 1 个操作),则您没有使用分布式事务并且测试不正确。

于 2012-07-17T05:48:18.183 回答