0

次のプロバイダー文字列を持つODBCドライバーを使用してリンクサーバーを作成しました

DRIVER={MySQL ODBC 5.1 Driver};SERVER=HOST;USER=uid;PASSWORD=pw;OPTION=3

リンクされたサーバーの名前はMYSQLです。そのように選択して更新すると、正しく機能します

SELECT * FROM OPENQUERY(MYSQL,'SELECT * FROM DatabaseName.Table')
UPDATE OPENQUERY(MYSQL, 'SELECT * FROM DatabaseName.Table where test=0') SET test=1

次の構文で挿入を実行しようとすると

INSERT OPENQUERY(MYSQL,'SELECT Column1, Column2, Column3 from DatabaseName.Table WHERE 1=0') VALUES (10,20,30)

私はこの次のエラーがあります

The OLE DB provider "MSDASQL" for linked server "MYSQL" could not INSERT INTO table "[MSDASQL]". Commands out of sync; you can't run this command now.
4

2 に答える 2

0

別のフォーラムのこのスレッドと同じ問題があると思います。そこの人々の問題を解決したと思われる回答から、プロバイダー文字列からデータベース名が欠落しているようです。DATABASE=mydb;プロバイダー文字列に追加してみてください。

元の答えは次のとおりです。

どうやら、スタジオとさまざまなメニューを使用してリンク サーバーを作成しようとすると、データベースである接続文字列に小さな詳細が保存されません。

EXEC master.dbo.sp_addlinkedserver @server='MYSQL', @srvproduct='MySQL',
@provider='MSDASQL', @provstr='DRIVER={MySQL ODBC 5.1
Driver};SERVER=HOST;Port=3306;USER=uid;PASSWORD=pw;OPTION=3;DATABASE=mydb;

odbc ドライバーのバグは、insert ステートメントにのみ影響するようで、2008 年から存在しています... mysql が今までに修正してくれることを願っていました...

上記の手順を使用してリンク サーバーを作成すると、挿入は他のすべてと同様に機能します。

于 2012-04-27T09:35:48.687 に答える
0

同じ問題が発生したばかりで、ODBC 接続を非アクティブForce use of forward-only cursor化することで問題を解決できました。Don't cache results for forward-only cursor

両方のオプションを無効にする必要があるかどうかはわかりません。ここからヒントを得ました

MySQL ODBC/Connector v5.1.11、64 ビット経由で、SQL Server 2012 を MySQL v5.1 にリンクしました。私のリンク データ ソースは、既に MySQL データベースが指定されているシステム ODBC DSN を使用するように構成されています (これは以前の回答に関連しています)。それでも、これらのカーソル オプションを非アクティブ化する前にエラーが発生します (デフォルトでは、新しいものに対して有効になっていません)。データ ソース、ある時点でそれらを有効にしたのは私でした)。

于 2013-02-08T11:12:13.453 に答える