0

2つのデータベースがあります。1つはMySQL5、もう1つはSQLServer2000です。MySQLデータベースをリンクサーバーとしてMSSQLデータベースにマップしています。MySQLデータベースに保存されているストアドプロシージャをMSSQLデータベースから呼び出したいのですが。これを行うための正しい構文は何ですか?SQL Server 2000でも可能ですか?

編集:

私はもう試した

EXEC webpush...clear_tables

しかし、私はこれを取り戻します:

Could not execute procedure 'clear_tables' on remote server 'webpush'.
[OLE/DB provider returned message: [MySQL][ODBC 3.51 Driver]
[mysqld-5.0.46-enterprise-gpl-log]You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the 
right syntax to use near '?=call "clear_tables";1' at line 1]

DB名と所有者を入力しても同じことがわかります。

4

2 に答える 2

0

この方法でリンク サーバーを使用したことはありませんが、リンクされた server.database.owner.procedure 構文を使用して exec を使用して呼び出すことはできませんか?

于 2009-08-19T21:47:01.193 に答える
0

私は似たようなことをしようとしていたので、これは時代遅れですが、検索している他の人のために返信を投稿すると思いました. 「...」表記でストアド プロシージャを実行する方法が見つかりませんでしたが、これは問題なく動作します

id が指定されたデータベース xxx のテスト テーブル内のレコードのバーコード フィールドを更新するための MySQL のストアド プロシージャの例を次に示します。

区切り記号 $$

存在する場合は手順を削除し xxxます。STP_products_Update_barcode$$ CREATE DEFINER= root@ localhost PROCEDURE xxx. STP_products_Update_barcode(IN xid INT,in xbarcode varchar(25)) BEGIN UPDATE test SET バーコード = xbarcode
WHERE id = xid; END $$

区切り文字;

これは、SQL Server で実行するための手順です (通常、TRY CATCH ブロックとその他のエラー トラップがありますが、わかりやすくするために省略しています。MYSQL_XXX は、SQL Server から MySQL にセットアップされたリンク サーバーであることに注意してください。

手順 [dbo] を作成します。[STP_XXX_MySQLBarcode_Update]

@product_id int、@barcode varchar(20) AS BEGIN SET NOCOUNT ON DECLARE @SQL nvarchar(1000)

SET @SQL = 'CALL STP_products_Update_barcode(' + CAST(@Product_id as varchar) + ','''+ @barcode +''')' EXEC (@SQL) AT MYSQL_XXX SET NOCOUNT OFF END GO

ここでコードをフォーマットするコツをつかんでおらず、現時点では少し急いでいますが、アイデアはわかります...

于 2009-12-22T00:56:05.853 に答える