2012-03-13 2 views
2

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

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

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

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

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

0

Насколько я могу судить, вы ничего не можете обновить через openquery. Openquery выполняет ваш скрипт select на удаленном сервере MySQL, захватывает и извлекает результаты, а затем обрабатывает его в рабочей среде.

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

6

Весь этот вопрос уходит с настройкой на соединителе ODBC MySQL.

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

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

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

Смежные вопросы