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 的一篇)是最重要的一篇:语法很棘手,直到我意识到 [database.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;