2010-05-28 69 views
3

我試着去執行一個存儲過程,只需插入它的結果在一個臨時表中,我得到了以下信息:鏈接服務器SQLNCLI問題。 「沒有交易活動的」

無法執行該操作,因爲OLE DB提供程序「SQLNCLI 「對於鏈接服務器」MyServerName「無法啓動分佈式事務。鏈接服務器「MyServerName」的OLE DB提供程序「SQLNCLI」返回消息「沒有事務處於活動狀態」。

我的查詢看起來是這樣的:

INSERT INTO #TABLE 
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3 

精確列號,姓名,問題是沒有結果的。

MSDTC被允許並在兩臺計算機上啓動,遠程過程調用也是如此。

機器不在同一個域中,但我可以從我的機器執行遠程查詢並獲得結果。我甚至可以執行存儲過程並查看其結果,但我無法將其插入到另一個表中。

請幫忙嗎? :)

編輯


哦,我忘了提,存儲過程不會觸發任何觸發。它只將記錄插入到臨時表中,它爲數據處理創建它自己。

回答

3

好了,下面很多的教程和研究了很多關於它之後,我改變了所有我認爲是必要的,它的工作配置,但它仍然沒有。

今天我們不得不強制在我們的開發服務器上重新啓動電源,因爲沒有出現故障,當我們啓動服務器時,猜猜是什麼?有用!

因此,爲了記錄,我更改了一些特定的MSDTC配置,將其添加爲鏈接服務器並允許RPC IN和OUT,並將RPC配置更改爲'NO AUTHENTICATION REQUIRED'或類似的內容。

我記得在某個地方看到改變這個配置之後,即使Windows說它已經重新啓動服務,也需要重新啓動。

我已經重新啓動我的服務器,因爲我改變了它兩次,但仍然無法工作。但是到了今天,在一個完整的關閉和打開之後,它就可以工作!

至於語法,我保持不變。

-2

您是否嘗試過使用openquery?

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3') 
+0

從MSDN文檔: (http://msdn.microsoft.com/en-us/library/ms188427(SQL.90).aspx) 在SQL Server 2000及更高版本,OPENQUERY不能用於執行在鏈接服務器上擴展存儲過程。但是,擴展存儲過程可以通過使用四部分名稱在鏈接的服務器上執行。例如: EXEC SeattleSales.master.dbo.xp_msver – Smur 2010-05-28 20:52:56

+0

原始海報沒有具體說明它是擴展存儲過程還是常規存儲過程。 – thomas 2010-05-28 21:18:35

1

您還必須檢查IP網絡配置中的DNS名稱解析。

例如,您有一臺名爲server-a.mydomain.com的服務器和另一臺名爲server-b.otherdomain.com的服務器,登錄server-a並執行「ping server-b」(不含域)。

如果響應「Ping請求無法找到主機服務器-b請檢查名稱並重試。」那就是問題所在。

轉到控制面板>網絡連接>右鍵單擊網卡>屬性> Internet協議>屬性>高級> DNS>按順序附加此DNS後綴。 這裏添加本地域名:mydomain.com然後添加遠程域:otherdomain.com 單擊確定,直至退出

現在,如果你做了「Ping服務器-B」應該repond類似:

執行ping server-b.otherdomain.com [192.168.1.2]與32個字節的數據:從192.168.1.2 答覆:字節= 32時間= 12ms的TTL = 64答覆從 192.168.1.2:字節= 32個時= 9ms TTL = 64

現在試着再次執行distr同類交易。