Sql server SQL Server:分布式事务冲突
给定一个SQL脚本:Sql server SQL Server:分布式事务冲突,sql-server,distributed-transactions,Sql Server,Distributed Transactions,给定一个SQL脚本: 开始一项交易。它是从服务器X启动的 从涉及表a的查询中选择到表B(=新表) 将表A选择到表C(=新表) 承诺 没有错误发生。这还不是一个分布式事务,因为一切都发生在一台服务器上 现在让我们说3。变成: 将表A选择到表C中,但表C位于不同的服务器上(我必须通过[remoteserver]上的EXECUTE('Select*into…')执行此操作,因为FROM子句中允许使用3前缀语法,但into子句中不允许使用) 现在SQL Server告诉我,此语句(3)与(现在已分发)事
EXECUTE('Select*into…')执行此操作,因为FROM子句中允许使用3前缀语法,但into子句中不允许使用)
在这种情况下(分布式事务版本中),为什么步骤3)不能毫无问题地执行,但相同的非分布式事务版本可以完美地工作?可能会有什么冲突?看起来查询2和查询3不兼容。要找出原因,请调查每个查询导致的锁。一种方法是:
sys.dm\u tran\u Locks
中找到锁也许您可以将生成的锁附加到问题?看起来查询2和查询3不兼容。要找出原因,请调查每个查询导致的锁。一种方法是:
sys.dm\u tran\u Locks
中找到锁也许您可以将生成的锁附加到您的问题?好的,伙计们。发现了问题,这很有趣。那是另外一回事。我没有提到我也创建了表A,因为我认为它与问题无关,所以: 将步骤2)替换为 现在非分布式版本可以工作了,分布式版本不工作(即步骤3) 将步骤2)替换为 现在两个版本都可以正常工作 但是我真的不在乎,因为当我在事务之前创建带有主键的表时,整个过程也会起作用。只是在事务中使用CREATETABLE语句创建主键会导致分布式版本无法工作
如果有人知道为什么,请写在这里:)好的,伙计们。发现了问题,这很有趣。那是另外一回事。我没有提到我也创建了表A,因为我认为它与问题无关,所以: 将步骤2)替换为 现在非分布式版本可以工作了,分布式版本不工作(即步骤3) 将步骤2)替换为 现在两个版本都可以正常工作 但是我真的不在乎,因为当我在事务之前创建带有主键的表时,整个过程也会起作用。只是在事务中使用CREATETABLE语句创建主键会导致分布式版本无法工作
如果有人知道为什么,请写在这里:)谢谢你的回答,我还以为这也与锁有关,现在不太确定。至少我现在有办法解决真正的问题。在我自己对我最初发帖的回答中了解原因。如果你对主键引起的真正问题有一个答案,请也回答这个问题,因为我很感兴趣。谢谢。谢谢你的回答,我还以为这也和锁有关,现在不太确定了。至少我现在有办法解决真正的问题。在我自己对我最初发帖的回答中了解原因。如果你对主键引起的真正问题有一个答案,请也回答这个问题,因为我很感兴趣。谢谢。在您提交之前,该表仅对其自身的连接可见。不允许对第二个连接进行操作。在您提交之前,该表仅对其自己的连接可见。第二个连接不允许在其上操作。
2) Create Table A **with** a primary key.
2) Create Table A with **no** primary key