7

我正在尝试在 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
4

2 回答 2

8

您可以通过将服务器选项“remote proc transaction Promotion”设置为“false”来防止对链接服务器使用分布式事务:

EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false'

这是同样的问题

于 2014-08-27T18:19:10.513 回答
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

如果这有效,它肯定是 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 问题的所有事情(以及其他一些问题)。

于 2013-09-06T12:37:37.090 回答