0

我使用带有以下提供程序字符串的 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.
4

2 回答 2

0

我认为您在另一个论坛上遇到了与此主题相同的问题。从似乎已经解决了那里的人的问题的答案来看,您似乎缺少提供程序字符串中的数据库名称。尝试添加DATABASE=mydb;到您的提供者字符串。

这是原始答案:

显然,如果您尝试使用工作室和各种菜单创建链接服务器,连接字符串中没有保存一个小细节,即数据库!

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 现在修复它......

使用上述过程创建链接服务器后,插入和其他所有操作一样有效!

于 2012-04-27T09:35:48.687 回答
0

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

我不确定是否需要禁用这两个选项。我从这里得到了提示

我通过 MySQL ODBC/Connector v5.1.11,64 位将 SQL Server 2012 链接到 MySQL v5.1。我的链接数据源配置为使用已指定 MySQL 数据库的系统 ODBC DSN(这与之前的答案有关),但在停用这些游标选项之前我仍然收到错误(默认情况下,它们未启用新的数据源,我是在某个时候启用它们的人)。

于 2013-02-08T11:12:13.453 回答