链接服务器的OLe数据库提供程序"SQLNCLI"无法启动分布式事务

use*_*214 7 sql sql-server

我试图在SQL Server 2008中调用存储过程并将获取的数据存储到本地临时表中.

当我尝试运行它时,我收到以下错误:

无法完成操作,因为链接服务器的OLe DB提供程序"SQLNCLI"无法启动分布式事务

我的代码如下:

create table #temp(
    col1 as int,
    col2 as varchar(50)
)

insert into #temp
exec [192.168.0.9].[db1].[dbo].[tablename] @usr_id=3
Run Code Online (Sandbox Code Playgroud)

小智 8

通过将服务器选项"remote proc transaction promotion"设置为"false",可以防止对链接服务器使用分布式事务:

EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false'
Run Code Online (Sandbox Code Playgroud)

这是同一个问题


Gar*_*ker 3

链接服务器无法开始分布式事务错误是由于 MSDTC(MS 分布式事务协调器)中的问题造成的。问题可能由许多问题引起。包括MSDTC未运行、被防火墙阻止等。

如果您需要事务,您几乎必须自己调试问题,因为它是环境问题。如果您可以重写以避免需要交易,您的生活会更简单。为了确保这是 MSDTC 问题,请编写一个不依赖于 MSDTC 的简单查询。例如

create table #temp( col1 as int, col2 as varchar(50) )

insert into #temp 
select col1, col2 from [192.168.0.9].[db1].[dbo].[tablename] where usr_id=3
Run Code Online (Sandbox Code Playgroud)

如果这有效,那么它绝对是 MSDTC(也许是一个可以避免的问题)

——添加了这个。花了一点时间寻找 MSDTC 调试。http://www.sqlwebpedia.com/content/msdtc-troubleshooting非常好,http://www.mssqltips.com/sqlservertip/2083/troubleshooting-sql-server-distributed-transactions-part-1-of- 2/它们几乎涵盖了我记得必须调试 MSDTC 问题的所有内容(还有其他一些问题)。