我试图在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
答案 0 :(得分:8)
您可以通过设置服务器选项&#proc; remote proc transaction promotion'来阻止对链接服务器使用分布式事务。到' false':
EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false'
答案 1 :(得分:3)
链接服务器无法启动分布式事务错误是由于MSDTC(MS分布式事务协调器)中的问题。问题可能来自许多问题。包括MSDTC未运行,被防火墙阻止等。
如果您需要交易,您必须自己调试问题,因为它是环境问题。如果你可以重写以避免交易,你的生活会更简单。只是为了确保它是MSDTC问题,编写一个不依赖于MSDTC的简单查询。 e.g。
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问题调试的所有事情(以及其他一些问题)。