2012-03-13 16 views
2

私はSQLサーバからMySqlテーブルを更新するクエリを書く際に助けが必要です。 リンクサーバーと選択クエリを作成しましたが、更新中にエラーが発生しました。私は本当にそのようなタイプの質問を書いているので、エラーメッセージとそれが何を意味するのか理解してください。MS SQLサーバからMySqlを更新してください

私の更新クエリ:

UPDATE openquery(stagedb_za, 'Select acm_flag FROM aol_center WHERE nid = 6439') 
Set acm_flag = 'P' 

エラー:

OLE DB provider "MSDASQL" for linked server "stagedb_za" returned message "Row cannot be located for updating. Some values may have been changed since it was last read.". Msg 7343, Level 16, State 4, Line 1 The OLE DB provider "MSDASQL" for linked server could not UPDATE table "[MSDASQL]". The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

答えて

3

[OK]を、私は答えを得ました。 あなたが列の値を更新しているようで、新しい値が既存のものと同じ場合は変更がないので扱われ、更新は行われません。

私の場合、acm_flagを 'P'に更新していましたが、値はすでに 'P'だったため、更新は行われませんでした。私はそれを別の値に更新しようとしたが、うまくいった。

0

私が懸念している限り、あなたはopenqueryを通して何かを更新することはできません。 OpenQueryは、リモートMySQLサーバで選択スクリプトを実行し、結果を取得して作業環境で処理します。

このselectが生成するのは更新不可能な結果セットなので、その前に更新する必要はありません。

6

この問題は、MySQL ODBCコネクタの設定で解決します。

MySQLにリンクしているSQL Serverで、リンクされたサーバーで使用されているMySQL ODBC接続の構成画面に進みます。 「詳細」を開きます。 "カーソル/結果"タブで。 「影響を受けた行ではなく、一致した行を返す」チェックボックスをオンにします。

この設定を変更すると、MySQLのフィールド値を既に設定されている値に設定した更新はエラーを返しません。

これを別のフォーラムで発見する前に、フィールドベースで問題の値を除外するためにたくさんのコードを入れました。かんたんだよ。

関連する問題