我使用带有以下提供程序字符串
的ODBC驱动程序创建了一个链接服务器DRIVER={MySQL ODBC 5.1 Driver};SERVER=HOST;USER=uid;PASSWORD=pw;OPTION=3
我的链接服务器名为MYSQL。如果我以这种方式选择和更新它可以正常工作
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.
答案 0 :(得分:0)
我认为你在另一个论坛上遇到与this thread相同的问题。从似乎解决了那里的人的问题的答案,看起来你从提供者字符串中遗漏了数据库名称。尝试将DATABASE=mydb;
添加到您的提供商字符串。
以下是原始答案:
显然,如果您尝试使用studio和the创建链接服务器 各种菜单,小细节未保存在连接字符串中, 这是数据库!
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驱动程序中的错误似乎只影响insert语句 并且自2008年以来一直存在...我希望mysql修复 它现在......
使用上述过程创建链接服务器后, 插入工作以及其他所有工作!
答案 1 :(得分:0)
我刚遇到同样的问题,并设法通过停用Force use of forward-only cursor
和Don't cache results for forward-only cursor
来解决此问题。
我不确定是否需要禁用这两个选项。我从here
得到了提示我通过MySQL ODBC / Connector v5.1.11,64位将SQL Server 2012链接到MySQL v5.1。我的链接数据源配置为使用已经指定了MySQL数据库的系统ODBC DSN(这与之前的答案有关)但是在取消激活那些游标选项之前我仍然遇到错误(默认情况下它们没有启用新的数据源,我是那个在某些时候启用它们的人。)