我有一個問題,填充一個臨時表與來自鏈接服務器上的過程調用的結果集,其中再次調用另一個服務器上的過程。如何通過兩臺鏈接的服務器獲取存儲過程調用的結果集?
我有一個存儲過程sproc1與下面的代碼,它調用鏈接服務器上的另一個過程sproc2。
SET @sqlCommand = 'INSERT INTO #tblTemp (ModuleID, ParamID) ' +
'(SELECT * FROM OPENQUERY(' + @targetServer + ', ' +
'''SET FMTONLY OFF; EXEC ' + @targetDB + '.usr.sproc2 ' + @param + '''))'
exec (@sqlCommand)
現在在叫我sproc2再次調用另一個鏈接的服務器,它返回結果集我在第三個過程sproc3。
SET @sqlCommand = 'EXEC ' + @targetServer +'.database.usr.sproc3 ' + @param
exec (@sqlCommand)
整個事情doen't工作,我得到一個SQL錯誤7391
的操作,因爲OLE DB提供程序 「%ls」 的鏈接服務器 「%1!」 是無法進行無法開始分佈式事務。
我已經檢查了這個提示microsoft article,但沒有成功。 但也許,我可以更改sproc1中的代碼。會有替代臨時表和開放查詢嗎?
只是調用存儲過程從服務器A到B到C並返回結果集正在工作(我經常在應用程序中這樣做)。但是,臨時表和openquery的這種特殊情況不起作用!
還是隻是不可能我想做什麼? microsft文章指出:
檢查您在目標服務器上引用的對象。如果它是一個視圖或一個存儲過程,或者導致觸發器執行,請檢查它是否隱式引用另一個服務器。如果是這樣,第三臺服務器是問題的根源。直接在第三臺服務器上運行查詢。如果您無法直接在第三個服務器上運行查詢,則問題實際上不在鏈接的服務器查詢中。首先解決潛在的問題。
這是我的情況嗎? PS:我無法避開三臺服務器的體系結構。