【发布时间】:2012-08-14 19:06:06
【问题描述】:
给定一个 SQL 脚本:
- 开始事务。它从服务器 X 启动
- 从涉及表 A 的查询中选择到表 B(= 新表)
- 将表 A 选择到表 C 中(= 新表)
- 提交。
没有错误发生。这还不是分布式事务,因为一切都发生在一台服务器上。
现在让我们说 3. 变成:
- 将表 A 选择到表 C 中,但表 C 在不同的服务器上(我必须通过
EXECUTE('SELECT * INTO ...') AT [remoteserver]执行此操作,因为 FROM 子句中允许使用 3 前缀语法,但 INTO 子句中不允许使用)
现在 SQL Server 告诉我这条语句 (3) 与(现在已分发的)事务中的另一条语句产生了冲突。
为了向您展示错误的来源并证明分布式事务确实在我的设置上有效我现在注释掉第 2 步)!
现在一切正常。所以步骤 2) 使问题发生。但是第 2 步)基本上只对表 A 和其他一些表进行连接选择以生成表 B,仅此而已。
为什么不能在这种情况下(在分布式事务版本中)执行步骤 3)而没有问题,但相同的非分布式事务版本可以完美运行?又可能有什么冲突?
【问题讨论】:
标签: sql-server distributed-transactions