2012-04-27 49 views
0

我一直在使用ODBC驱动程序与下面的供应商串插入错误服务器的MySQL

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. 
+1

解决创造了这样我的链接服务器: EXEC master.dbo.sp_addlinkedserver @服务器= 'MYSQL',@ srvproduct = 'MySQL的', @供应商= 'MSDASQL',@ provstr ='DRIVER = {MySQL的ODBC 5.1 驱动}; SERVER = HOST;端口= 3306; USER = UID; PASSWORD = PW; OPTION = 3; DATABASE = MYDB; – 2012-04-27 09:34:28

回答

0

我想执行插入你在另一个论坛上遇到了与this thread相同的问题。从似乎已经解决了那里的人的问题的答案,它看起来像您的提供程序字符串中缺少数据库名称。尝试将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驱动程序的bug似乎只影响INSERT语句 并一直围绕2008年以来...我本来希望,MySQL的现在固定 它...

后您使用上述步骤创建链接服务器, 插入和其他所有工作一样!

+0

是的,它是...阅读我的评论 – 2012-04-27 09:39:41

+1

@Luigi看起来你发布评论大约在同一时间我贴我的答案。在将来问你的问题后,如果你自己解决问题,请添加决议作为答案并接受它。这样,其他用户就不会试图回答你的问题,同样的问题的人可以找到答案,而无需在你的评论中挖掘。 – Bridge 2012-04-27 09:50:25

+1

@Luigi所以,现在请标记此问题解决,通过张贴您的答案作为一个新的答案并接受它,或接受我的答案。 – Bridge 2012-04-27 09:51:57

0

我刚刚经历了同样的问题,并设法通过停用Force use of forward-only cursorDon't cache results for forward-only cursor我的ODBC连接来解决这个问题。

我不知道,如果这两个选项需要禁用。我得到了暗示here

我通过My​​SQL ODBC/Connector v5.1.11,64位将SQL Server 2012连接到MySQL v5.1。我的链接数据源配置为使用系统ODBC DSN其中已经有指定的MySQL数据库(这是相对于以前的答案),但我还是停用这些光标选项(默认情况下,他们没有为新启用之前得到了错误数据来源,我是在某个时候启用它们的人)。