从我们的 DEV 环境中的 SQL Server 2014 RTM,我正在使用 SQL 登录名执行此查询。
select t.noshipid, y.nofolder
from distantserver.distantdatabase.dbo.sometable t (nolock)
inner join somedatabase.dbo.sometable y (nolock)
on cast(t.nobill as bigint) = y.nobill
where t.type_payment = 'CE'
group by t.noshipid, y.nofolder
远程服务器在 2008 R2 中。
我返回一个错误
消息 8522,级别 16,状态 3,第 1 行 Microsoft 分布式事务处理协调器 (MS DTC) 已停止此事务。
如果我在 2008 R2 的生产服务器上执行相同的查询,则没有错误。
1:有问题的 SQL 登录具有必要的访问权限。
2:用于连接2008 R2服务器的provider是SQLNCLI10
问题:
1:是否有可能将DEV服务器升级到2014导致这些问题?
2:从 2014 到 2008 R2 使用四部分标识符是否有任何已知问题?
from distantserver.distantdatabase.dbo.sometable
而不是使用 openquery
FROM OPENQUERY([distantserver],
因为使用 OPENQUERY,查询不会返回错误。
3:是否有任何 sp_configure 选项或链接服务器选项我需要配置,因为 2014?
更新 14:41
如果我添加
BEGIN DISTRIBUTED TRANSACTION
在顶部,分布式部分工作正常。我只想强调一个事实,在升级之前,这不是必需的。
理想情况下,您应该使用
SQLNCLI11
and notSQLNCLI10
。SQLNCLI11 因为它连接回 SQL 2008R2/2008/2005 版本。有一个值得了解的已知错误
SQLNCLI10
(尽管表明从 SQL Server 2008R2 连接到 2000 时出现问题,但它表明您在从 SQL Server 2014 到 2008R2 时遇到了它)。另外,由于您使用的是链接服务器 - 请参阅:哪个更有效:从链接服务器中选择或插入链接服务器?