SELECT * FROM MySQL Linked Server 使用没有 OpenQuery 的 SQL Server

Posted

技术标签:

【中文标题】SELECT * FROM MySQL Linked Server 使用没有 OpenQuery 的 SQL Server【英文标题】:SELECT * FROM MySQL Linked Server using SQL Server without OpenQuery 【发布时间】:2015-11-05 05:55:57 【问题描述】:

我正在尝试使用SQL Server 查询mysql 链接服务器。

以下查询运行良好。

SELECT * FROM OPENQUERY([Linked_Server], 'SELECT * FROM Table_Name')

是否可以在不使用OpenQuery 调用的情况下运行相同的查询?

【问题讨论】:

【参考方案1】:

在这里找到答案。现在我可以进行三点符号查询了。谢谢

http://www.sparkalyn.com/2008/12/invalid-schema-error/

转到提供程序选项屏幕在 SQL Server 2005 中,您可以在链接服务器上方的文件夹中看到提供程序列表(假设您具有适当的权限)。右键单击 MSDASQL 并转到属性。在 SQL Server 2000 中,提供程序选项按钮位于创建链接服务器的对话框中。 选中“仅零级”复选框

【讨论】:

【参考方案2】:

你可以使用下面的语句

select * from [linkedServerName]...[databaseName.TableName]

但是在执行上面的代码之前,你必须做一些改变..

在 SSMS 中

SSMS -> 展开“链接服务器”文件夹 -> 打开 Provider 文件夹 -> 找到 MSDASQL 并获取它的属性

然后检查“仅零级”按确定

然后执行上面的查询,尽情享受吧!!!

【讨论】:

恕我直言,这篇文章(和 PST 的一篇)是最重要的一篇:语法很棘手,直到我意识到 [d​​atabase.table] 必须作为单个引用时,我才能让我的查询工作从 SQLServer 的角度来看实体。 你从哪里得到 [databaseName.TableName] ?使用更直观的 [databaseName].[TableName] 它不起作用。如果可以的话我给10分【参考方案3】:

试试这样:

SELECT * FROM [Linked_Server]...[db_name.table_name]

工作正常,但是存在转换数据类型的问题。 使用起来更安全可靠的是 OPEQUERY。

SELECT * FROM OPENQUERY([Linked_Server], 'SELECT * FROM db_name.table_name')

【讨论】:

【参考方案4】:

您应该可以直接查询链接服务器。

select * from mylinkedserver.database.schema.mytable

编辑:

尝试使用本文中提到的三点表示法: http://www.ideaexcursion.com/2009/02/25/howto-setup-sql-server-linked-server-to-mysql/

SELECT * FROM MYSQLAPP...tables

消息 7399,级别 16,状态 1,第 1 行 OLE DB 提供程序“MSDASQL”用于 链接服务器“MySQLApp”报告错误。提供者没有给 有关错误的任何信息。消息 7312,第 16 层,状态 1,第 1 行 对 OLE DB 提供程序“MSDASQL”的架构或目录的使用无效 链接服务器“MySQLApp”。提供了一个由四部分组成的名称,但 提供者没有公开必要的接口来使用目录或 架构。

这个“四部分名称”错误是由于 MySQL ODBC 驱动程序。您不能使用 dotted 切换目录/模式 符号。相反,您必须注册另一个 DSN 并链接 您要访问的不同目录的服务器。确定并且 遵循示例查询中记录的三点表示法。

【讨论】:

当我执行 SELECT * FROM [Linked_Server].Database_name.DBO.Table_Name 时出现以下错误:链接服务器“Linked_Sever”的 OLE DB 提供程序“MSDASQL”的架构或目录无效。提供了一个由四部分组成的名称,但提供者没有公开必要的接口来使用目录或模式。 当我尝试从 Linked_Server 中选择 *...Table_Name。我得到为链接服务器“Linked_Server”的提供程序“MSDASQL”指定了无效的架构或目录。【参考方案5】:

使用这个有一个重点:

SELECT * FROM [Linked_Server]...[db_name.table_name]

你必须继续

链接服务器->提供程序-> MSDASQL:

并确保这三个选项已被选中

动态参数 仅零级 允许进程内

https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=153024

【讨论】:

【参考方案6】:

这个解决方案非常适合查询小表,但它似乎不使用索引,因此从大表中获取很少的行,即使是通过远程服务器上索引的字段也需要很长时间。

所以 - 如果我错了,请纠正我 - 对于大型数据集,最好使用 OPENQUERY,因为查询是在远程服务器上评估和优化的,使用索引等等。

【讨论】:

【参考方案7】:

如果有人仍然遇到这个问题...我必须进入链接服务器属性 -> 服务器选项并将 RPC 和 RPC Out 更改为 true。然后我可以像这样运行 [链接服务器]...[表]

【讨论】:

你能举例说明一下吗?我

以上是关于SELECT * FROM MySQL Linked Server 使用没有 OpenQuery 的 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

mysql之数据查询SELECT * FROM students; SELECT * FROM classes;

Mysql: SELECT * FROM .... 没有一个字段

SELECT * FROM 多个表。 MySQL

SELECT * FROM 链接的 MySQL 服务器

MySQL复制表-SELECT INTO FROM

MySQL SELECT x FROM a WHERE NOT IN (SELECT x FROM b) - 意外结果