2

我有一个 SQL Server 2012.(120.120.55.15)

今天我将 MySQL 服务器(120.120.55.30)链接到我的 SQLServer 并给它起了一个名字“MYSQL”。

在对象资源管理器中,一切似乎都很好。我可以看到MySQL服务器的数据库“ exampleDataBase ”和其中的表。

但是当我尝试像这样运行选择查询时:

SELECT * 
FROM   openquery
        (
        MYSQL, 
        '
         SELECT * 
         FROM [exampleDataBase].[msProcMatrix]
        '
        )

我得到一个错误:

消息 7399,级别 16,状态 1,第 1 行链接服务器“MYSQL”的 OLE DB 提供程序“MSDASQL”报告错误。提供商没有提供有关该错误的任何信息。消息 7350,级别 16,状态 2,第 1 行无法从链接服务器“MYSQL”的 OLE DB 提供程序“MSDASQL”获取列信息。

使用我的链接 MySQL 服务器应该额外做些什么?

4

7 回答 7

16

找到了决定:

SELECT * 
FROM openquery(MYSQL, 'SELECT * FROM exampleDataBase.msProcMatrix')

没有括号!

对我来说很奇怪,但有效......

于 2013-05-22T10:42:07.570 回答
3

在使用 MY SQL 3.51 64 位 ODBC 驱动程序在 MS SQL Server 2008 64 位上解决了同样的问题后,这对我很有用

SELECT *
FROM OPENQUERY
(
   linked_server_name,
   'SELECT * FROM linked_database_name.linked_table_name'
)
于 2013-10-17T18:31:51.213 回答
1

您可能需要在数据库名称和表名称之间使用模式名称。

SELECT * 
FROM   openquery
        (
        MYSQL, 
        '
         SELECT * 
         FROM [exampleDataBase].**[dbo]**.[msProcMatrix]
        '
        )
于 2013-05-22T10:12:43.313 回答
1

当我使用链接服务器时,我从不使用Select * From.

尝试使用Select Column1, Column2, ... ColumnN From.

对我来说总是很好。

于 2014-01-28T14:41:24.243 回答
0

如果在 ODBC 中配置了默认目录(“exampleDataBase”),则以下内容也将起作用:

选择 * 从 MYSQL...msProcMatrix

于 2016-02-03T17:40:34.503 回答
-2

你可以试试这个查询。

EXEC ('SELECT * FROM [exampleDataBase].[msProcMatrix]') 在 MYSQL

于 2018-03-14T09:50:34.607 回答
-2

请尝试以下格式的语句..对我来说效果很好

SELECT * 
FROM   openquery
        (
        MYSQL, 
        '
         SELECT * 
         FROM [MYSQL]...[exampleDataBase].[msProcMatrix]
        '
        )

在名称中包含额外的级别可能会解决您的问题。

于 2018-03-14T10:02:43.350 回答