Ошибка вставки с использованием связанного сервера 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 (это относится к предыдущим ответам), и все же я все еще получал сообщение об ошибке, прежде чем деактивировать эти параметры курсоров (по умолчанию они не включены для новых Источники данных, я был тем, кто включил их в какой-то момент).