2010-11-11 322 views
5

我有SQL Server 2008與鏈接的Sybase服務器,我試圖使用OPENQUERY在Sybase服務器上執行存儲過程。如果我有一個不帶參數的存儲過程,它會成功。如果我有一個存儲過程與參數失敗。我甚至嘗試過一個非常基本的存儲過程,只有一個int仍然失敗。下面是我使用的語法:使用OPENQUERY執行存儲過程

select * from 
OPENQUERY([LINKSERVER],'exec database.user.my_stored_proc ''AT'',''XXXX%'',''1111'',1') 

消息7357,級別16,狀態2,第3行 無法處理 'AT', 'XXXX%' 的對象「EXEC database.user.my_stored_proc, '1111' ,1" 。鏈接服務器「LINKSERVER」的OLE DB提供程序「ASEOLEDB」表示該對象沒有列或當前用戶沒有該對象的權限。

由於proc將會在沒有參數的情況下執行得很好,我不認爲這是一個權限問題。

+0

你嘗試直接在Sybase上運行的SQL文本? – Andomar 2010-11-11 21:48:24

+0

是的,在Sybase上執行得很好 – 2010-11-15 14:54:06

回答

1

鏈接服務器和OPENQUERY,寶石到MS SQL服務器......這是羊服裝的狼。我發現了以下解決方案與參數

  1. 打交道時,如果SP基本上是SELECT語句,此舉同樣的VIEW上班只是通過OPENQUERY通過SQL語句。

  2. 將OPENQUERY構建爲字符串,然後使用execute_sql。

1

你也可以看到,如果它的工作原理與SET FMTONLY ON先於高管:

OPENQUERY([LINKSERVER], 'SET FMTONLY ON; EXEC database.user.my_stored_proc'出現在' '' 'XXXX%'',''1111'',1')

如果你試試這個,它可以工作,你應該可以谷歌FMTONLY + OPENQUERY瞭解它的含義。

+1

不行,這不起作用 – 2010-11-15 14:51:21

12

這爲我工作,

SELECT * FROM OPENQUERY(LOCALSERVER, 'SET FMTONLY OFF EXEC snr.dbo.GetAllSignals @controlRunId = 25, @experimentRunId = 26') 

我創建臨時表,這就是爲什麼我得到拒絕訪問

下面是詳細信息http://www.sommarskog.se/share_data.html#OPENQUERY

+0

+1這也適用於我。謝謝!我沒有使用臨時表,但是我正在遠程過程中執行一個EXEC(@VariableWithQuery),其中該變量是從SELECT語句中設置的。直到我添加了「SET FMTONLY OFF」,這才奏效。到開始。但是,如果我通過SET命令設置變量,那麼它不需要SET FMTONLY即可工作。奇。 – 2012-06-22 21:22:49

+0

謝謝!這也適用於我! :) – Erick 2013-03-04 21:43:32

+0

公正的警告,這種方法有一些潛在的意外後果,正如本答案所討論的:https://stackoverflow.com/a/14299989;但是,這是「讓它工作」的最簡單方法,並且避免處理DTC,這可能更糟糕,所以這('SET FMTONLY OFF')是一個公平的解決方法。 – NateJ 2017-06-30 02:05:11

2

我創建了一個SP一點不返回任何值,它不起作用。 你在mysql中的SP必須返回一個值! 比如我這樣做是「MySQL的」:

CREATE DEFINER=`root`@`localhost` PROCEDURE `MyPro`(IN `Name` VARCHAR(50), IN `Id` INT, OUT `Result` INT) 
MODIFIES SQL DATA 
BEGIN 
DECLARE Result INT; 
    SET Result = 0; 
INSERT into MyTable (Id,Name) VALUES(Id,Name); 
SELECT Result; 

END 

即「ID」和「名稱」輸入參數和「結果」是輸出參數 在SQL Server中創建鏈接的服務器,並調用它是這樣的:

select * from openquery 
(
    Test,'call mydb.MyPro(''Name'',''16'', @P0);' 
) 

它爲我的作品:d