2011-04-07 85 views
0

我需要能夠運行遠程存儲並將其結果存儲在臨時表中,以便可以對數據進行進一步處理。我可以自己運行下面的exec語句並且獲取數據,但是,當試圖插入臨時表時,我收到以下錯誤消息:如何通過鏈接服務器運行遠程存儲並將結果存儲在集羣服務器上的臨時表中

OLE DB提供程序「SQLNCLI」用於鏈接服務器「 LinkedServerName「返回消息」沒有事務處於活動狀態「。 Msg 7391,Level 16,State 2,Line 8 該操作無法執行,因爲鏈接服務器「LinkedServerName」的OLE DB提供程序「SQLNCLI」無法啓動分佈式事務。

我不想使用連接,因爲它的速度非常慢,所以我想我會嘗試通過調用遠程sproc到臨時表中來選擇所需的數據,然後以此方式處理它。

我試過這裏下面的說明,沒有運氣: http://sql-articles.com/blogs/linked-server-problem-windows-2003-sp1-setting-msdtc-security-configuration/ 我認爲主要的問題是,在源服務器(在那裏我運行下面的SQL)是羣集服務器,而我錯過了一些設置DTC。 任何想法?

--drop table #tmp 

CREATE TABLE #tmp 
(
    col1 int, 
    col2 int 
); 

insert into #tmp (col1, col2) 
exec [LinkedServerName].[RemoteDBName].dbo.remote_sproc '04/01/2011', '04/06/2011' 

select * from #tmp 

回答

0

雖然我沒有找到一種方法,使用一個羣集服務器安裝分佈式事務,我沒有找到一個替代的方式來獲取數據遠程使用OPENROWSET。性能方面,它看起來與使用鏈接服務器非常相似,並且在我們的生產環境中運行良好。

/* 
-- run the following once to configure SQL server to use OPENROWSET... 

sp_configure 'Show Advanced Options', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 
GO 

*/ 

-- still need a table to store the result set in to work 
-- with the data after we grab it... 

declare @table table 
(
    col1 int, 
    col2 int 
); 

-- use openrowset instead of a linked server 

insert into @table 
select * 
FROM OPENROWSET('SQLNCLI', 'Server=HOSTNAME;Uid=USERNAME;Pwd=PASSWORD', 
    'EXEC DBName.dbo.sprocName ''Param1'', ''Param2''') 

select * from @table 
相關問題