给定一个SQL脚本:
没有错误发生。这不是分布式事务,因为一切都发生在1台服务器上。
现在让我们说3.成为:
EXECUTE('SELECT * INTO ...') AT [remoteserver]
执行此操作,因为在FROM子句中允许使用3前缀语法,但在INTO子句中不允许这样做)现在SQL Server告诉我这个语句(3)与(现在分发的)事务中的另一个语句产生冲突。
向您展示错误的来源,并证明分布式交易确实可以在我的设置上运行我现在注释掉第2步!
现在整个事情都有效。因此,步骤2)使问题发生。但是步骤2)基本上只对表A和其他一些表进行连接选择以生成表B而不是其他任何内容。
为什么步骤3不能在没有问题的情况下执行(在分布式事务版本中),但同样的非分布式事务版本可以正常运行?可能会发生什么冲突?
答案 0 :(得分:0)
看起来查询2和查询3不兼容。要找出原因,请调查每个查询导致的锁定。一种方法是:
sys.dm_tran_locks
中找到锁。也许您可以将结果锁附加到您的问题中?
答案 1 :(得分:0)
用
替换步骤2)2) Create Table A **with** a primary key.
现在非分布式版本可以使用,分布式版本可以不(步骤3)。
用
替换步骤2)2) Create Table A with **no** primary key
现在两个版本都运行良好。
但我真的不在乎,因为整个事情也在我事务之前在 创建表时有效。只是用事务中的create table语句创建主键导致3)分布式版本不起作用。
如果有人知道为什么请在这里写下来:)