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

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

以下查询运行良好。

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

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

【问题讨论】:

    标签: mysql sql-server linked-server 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。然后我可以像这样运行 [链接服务器]...[表]

            【讨论】:

            • 你能举例说明一下吗?我
            猜你喜欢
            • 1970-01-01
            • 2013-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多