针对MariaDB的OpenQuery更新返回'表不存在'

时间:2017-01-17 21:16:29

标签: sql-server mariadb openquery

我有SQL Server 2008 SP4实例访问在MariaDB上运行MediaWiki数据库的链接服务器(v 5.5.44)。我能从表中选择没问题:

SELECT *
FROM OPENQUERY(MEDIAWIKI,
'SELECT * FROM wiki.page WHERE page_title = ''Test''')

但是当我尝试更新表格时:

UPDATE OPENQUERY(MEDIAWIKI,
'SELECT * FROM wiki.page WHERE page_title = ''Test''')
SET page_title = 'TestChange'

我收到以下错误消息:

OLE DB provider "MSDASQL" for linked server "MEDIAWIKI" returned message "Table 'def.page' doesn't exist".
Msg 7343, Level 16, State 4, Line 1
The OLE DB provider "MSDASQL" for linked server "MEDIAWIKI" could not UPDATE table "[MSDASQL]". 

用户拥有完全权限,因此不应该成为问题。我还能够对运行MySQL的其他链接服务器进行更新。任何帮助都非常感谢。谢谢!

编辑:我能够通过构建动态查询字符串并在链接服务器上执行它来解决这个问题,大多只是好奇为什么会发生这种情况。

2 个答案:

答案 0 :(得分:2)

我是弗拉迪斯拉夫的第二名。 'def'用作目录值(如果查看服务器返回的列元数据,或者在INFORMATION_SCHEMA表'TABLES'或'COLUMNS'中查找.MySQL和MariaDB连接器都将表的模式作为目录返回,并将NULL作为模式返回。

必须是MariaDB Connector / ODBC有,但在元数据中的某处返回'def'作为模式(或目录?)。你用的是什么版本?实际上它可以在最新版本中修复。但请最好继续阅读Vladislav创建的JIRA问题

答案 1 :(得分:1)

您使用什么样的ODBC驱动程序?有2个,MariaDB一个,MySQL一个。这看起来像是其中一个ODBC中的错误。现在“def”是什么意思。 MySQL世界中存在大量关于目录,数据库和模式的混淆。使用元数据(column info description)返回MySQL结果集。列信息包含几个字段,其中包括“表目录”(始终是硬编码的“def”),还有“表模式”,也就是数据库。目录目前没有任何意义,也从来没有,但谁知道它可能意味着未来的某些东西。另一方面,“schema”可以放入UPDATE命令(UPDATE schema.table SET field = value WHERE ...)。因此,错误似乎是其中一个ODBC驱动程序错误地选择“目录”而不是“模式”。