针对 MariaDB 的 OpenQuery 更新返回“Table 不存在”

OpenQuery Update against MariaDB returning 'Table doesn't exist'

我有 SQL Server 2008 SP4 实例访问链接服务器,该服务器是 运行 MariaDB (v 5.5.44) 上的 MediaWiki 数据库。我可以从 table 到 select 没问题:

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

但是当我尝试更新 table:

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。非常感谢任何帮助。谢谢!

编辑:我可以通过构建动态查询字符串并在链接服务器上执行它来解决这个问题,主要是想知道为什么此时会发生这种情况。

你用的是什么ODBC驱动?有 2 个,MariaDB 一个,MySQL 一个。这看起来像是其中一个 ODBC 中的错误。现在 "def" 是什么意思。 MySQL 世界对目录、数据库和模式存在大量混淆。 MySQL 结果集与元数据 (column info description) 一起返回。列信息包含多个字段,其中包括 "table catalog"(始终硬编码 "def"),以及 "table schema",又名数据库。 Catalog 目前没有任何意义,也从未有过,但谁知道它可能在未来意味着什么。 "schema" 另一方面,您可以将其放入 UPDATE 命令 ( UPDATE schema.table SET field=value WHERE ...) 中。所以错误似乎是其中一个 ODBC 驱动程序错误地选择了 "catalog" 而不是 "schema"。

我在这里支持 Vladislav。 'def' 用作目录值(如果您查看由服务器 return 编辑的列元数据,或者 INFORMATION_SCHEMA tables 'TABLES' 或 'COLUMNS' . MySQL 和 MariaDB 连接器 return table 的模式作为目录,NULL 作为模式。

一定是 MariaDB Connector/ODBC 在元数据中的某处有但 returns 'def' 作为模式(或目录?)。你用什么版本?事实上它可以在最新版本中修复。但请更好地处理由 Vladislav

创建的 JIRA 问题