6

リンクされた Sybase サーバーを備えた SQL Server 2008 があり、OPENQUERY を使用して Sybase サーバーでストアド プロシージャを実行しようとしています。パラメータを取らないストアド プロシージャがある場合、問題なく成功します。パラメータを持つストアド プロシージャがある場合、失敗します。int のみを取る非常に基本的なストアド プロシージャを試してみましたが、それでも失敗しました。以下は私が使用している構文です:

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

メッセージ 7357、レベル 16、状態 2、行 3 オブジェクト "exec database.user.my_stored_proc 'AT','XXXX%','1111',1" を処理できません。リンク サーバー "LINKSERVER" の OLE DB プロバイダー "ASEOLEDB" は、オブジェクトに列がないか、現在のユーザーがそのオブジェクトに対するアクセス許可を持っていないことを示しています。

proc はパラメーターなしで問題なく実行されるため、パーミッションの問題ではないと思います。

4

7 に答える 7

15

これは私のために働いた、

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

一時テーブルを作成していたので、アクセスが拒否されました

詳細はこちらhttp://www.sommarskog.se/share_data.html#OPENQUERY

于 2011-08-22T00:34:27.523 に答える
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" と "Name" は入力パラメーターで、"Result" は出力パラメーターであり、SQL SERVER でリンク サーバーを作成し、次のように呼び出します。

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

それは私のために働きます:D

于 2016-05-17T07:29:03.000 に答える
1

Linked Servers と OPENQUERY、Gems to MS SQL Server...羊の皮をかぶったオオカミです。パラメータを処理するときに次の解決策が機能することがわかりました

  1. SP が基本的に単なる SELECT ステートメントである場合、同じものを VIEW に移動し、OPENQUERY を介して SQL ステートメントを渡すだけです。

  2. OPENQUERY を文字列として作成し、execute_sql を使用します。

于 2010-11-11T21:49:26.087 に答える
1

exec の前に SET FMTONLY ON を指定しても機能するかどうかを確認することもできます。

OPENQUERY([LINKSERVER],'SET FMTONLY ON; exec database.user.my_stored_proc ''AT'',''XXXX%'',''1111'',1')

これを試してみてうまくいく場合は、Google FMTONLY+OPENQUERY でその意味を理解する必要があります。

于 2010-11-15T02:04:52.823 に答える