Обновление MySql с сервера MS SQL - PullRequest
2 голосов
/ 13 марта 2012

Мне нужна помощь в написании запросов, которые будут обновлять таблицы MySql с сервера SQL.Я создал связанный сервер, и запросы на выборку работают нормально, но я получаю ошибки при обновлении.Я действительно новичок в написании запросов такого типа, поэтому, пожалуйста, помогите мне понять сообщение об ошибке и его значение.

Мой запрос на обновление:

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

Ошибка:

Поставщик OLE DB «MSDASQL» для связанного сервера «stagedb_za» вернул сообщение «Невозможно найти строку для обновления. Некоторые значения могли быть изменены с момента последнего чтения.».Сообщение 7343, уровень 16, состояние 4, строка 1 Поставщик OLE DB "MSDASQL" для связанного сервера не смог обновить таблицу "[MSDASQL]".В наборе строк использовался оптимистичный параллелизм, и значение столбца было изменено после последней выборки или повторной синхронизации содержащейся строки.

Ответы [ 2 ]

8 голосов
/ 27 августа 2014

Вся эта проблема исчезает с настройкой коннектора MySQL ODBC.

На сервере SQL, который связывается с MySQL, перейдите на экран настройки соединения MySQL ODBC, которое используется связанным сервером.,Откройте «Детали».На вкладке «Курсор / Результаты».Поставьте галочку в поле «Возвращать совпадающие строки вместо затронутых строк».

После внесения этого изменения конфигурации обновления, которые устанавливают значение поля MySQL в значение, которое оно уже имеет, не возвращают ошибку.

Прежде, чем я обнаружил это на другом форуме, я поместил МНОГО кода, чтобы отфильтровать оскорбительные значения на основе полей.Это легко.

4 голосов
/ 14 марта 2012

Хорошо, я получил ответ.Похоже, что когда вы обновляете значение столбца, и если новое значение совпадает с существующим, оно обрабатывается, поскольку никаких изменений не происходит, поэтому обновление не произойдет.

В моем случае я обновлял acm_flag до 'P'но это значение уже было 'P', поэтому обновление не произошло.Когда я пытался обновить его до другого значения, он работал просто отлично.

...