Ошибка вставки с использованием связанного сервера MySQL

Я создал связанный сервер, используя драйвер ODBC со следующей строкой поставщика

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

Мой связанный сервер называется MYSQL. Если я делаю Select и UPDATE таким образом, это работает правильно

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.

2 ответа

Решение

Я думаю, что у вас та же проблема, что и эта тема на другом форуме. Из ответа, который, кажется, решил проблему для людей там, похоже, что вы пропустили имя базы данных из строки вашего провайдера. Попробуйте добавить DATABASE=mydb; на строку вашего провайдера.

Вот оригинальный ответ:

Очевидно, если вы попытаетесь создать связанный сервер, используя studio и различные меню, небольшая деталь не сохранится в строке подключения, которая является базой данных!

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, похоже, влияет только на оператор вставки и существует с 2008 года... я бы надеялся, что mysql исправит это сейчас...

после того, как вы создадите связанный сервер, используя процедуру, описанную выше, вставка работает так же, как и все остальные!

Я только что столкнулся с той же проблемой и сумел ее решить, отключив Force use of forward-only cursor а также Don't cache results for forward-only cursor для моего соединения ODBC.

Я точно не знаю, нужно ли отключить оба варианта. Я получил подсказку отсюда

Я связал SQL Server 2012 с MySQL v5.1 через MySQL ODBC/Connector v5.1.11, 64-разрядный. Мой источник данных ссылок настроен на использование системного ODBC DSN, в котором уже была указана база данных MySQL (это относится к предыдущим ответам), и все же я все еще получал сообщение об ошибке, прежде чем деактивировать эти параметры курсоров (по умолчанию они не включены для новых Источники данных, я был тем, кто включил их в какой-то момент).

Другие вопросы по тегам