3

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

私の更新クエリ:

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

エラー:

リンクサーバー"stagedb_za"のOLEDBプロバイダー"MSDASQL"は、「更新する行が見つかりません。最後に読み取られてから一部の値が変更されている可能性があります。」というメッセージを返しました。メッセージ7343、レベル16、状態4、行1リンクサーバーのOLEDBプロバイダー"MSDASQL"は、テーブル"[MSDASQL]"を更新できませんでした。行セットは楽観的同時実行性を使用しており、列の値は、含まれている行が最後にフェッチまたは再同期された後に変更されました。

4

2 に答える 2

12

この問題全体は、MySQLODBCコネクタの設定で解消されます。

MySQLにリンクしているSQLServerで、リンクサーバーが使用するMySQLODBC接続の構成画面に移動します。「詳細」を開きます。「カーソル/結果」タブ。「影響を受ける行ではなく、一致する行を返す」にチェックを入れます。

その構成変更を行う際に、MySQLフィールド値をすでに持っている値に設定する更新はエラーを返しません。

別のフォーラムでこれを発見する前に、フィールドごとに問題のある値を除外するために、多くのコードを挿入していました。これは簡単。

于 2014-08-26T22:40:43.393 に答える
4

わかりました、答えがわかりました。列の値を更新しているときに、新しい値が既存の値と同じである場合は、変更がないものとして扱われるため、更新は行われません。

私の場合、acm_flagを「P」に更新していましたが、その値はすでに「P」であったため、更新は行われませんでした。別の値に更新しようとすると、問題なく動作しました。

于 2012-03-14T09:34:05.793 に答える