【问题标题】:pulling data from MySql Server using SQL server openquery使用 SQL Server openquery 从 MySql Server 中提取数据
【发布时间】:2013-04-29 17:08:35
【问题描述】:

我正在尝试使用 SQL 服务器 OPENQUERY 函数从 Mysql 服务器中提取数据。当我运行查询来计算 w mysql 服务器中的记录时,我得到的值没问题

-this query works and it return the total records found
SELECT count(*) AS total  FROM OPENQUERY(LinkedServer, 'SELECT * FROM mydb_name.users')

但是当我这样做时

SELECT login_user FROM OPENQUERY(LinkedServer, 'SELECT * FROM mydb_name.users')

我收到此错误

Msg 7347, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' for linked server 'LinkedServer' returned data that does not match expected data length for column '[MSDASQL].login_user'. The (maximum) expected data length is 60, while the returned data length is 16.

我试过了,但没用

SELECT CONVERT(CHAR(60), login_user) AS name  FROM OPENQUERY(LASWEB, 'SELECT * FROM mydb_name.users')

我假设这是一个数据类型问题,但我该如何解决呢?如何提取我需要的数据?

谢谢

【问题讨论】:

  • 你试过这个吗 - stackoverflow.com/questions/4215979/… : " [在答案中] ...转到 MySQL 服务器并将数据类型更改为 varchar() 保留长度不变...例如,char (10) 将其更改为 varchar(10)。”
  • @Question3CPO 确实有效。但我不想将我所有的 mysql 列从 Char 更改为 varchar!我的大多数表都是 char 而不是 varchar 我希望你能帮我完成这个问题,因为我必须将 mysql 表保留为 char。谢谢
  • 有没有办法可以在 MySQL 上创建该数据的重复表,更改重复表上的数据类型,然后将其移动到 SQL Server,还是不允许这样做?如果是这样,重复表可以作为 SQL Server 的参考点,您可以保留原始表的列类型。
  • 我刚刚开始工作。这是我必须做的 SELECT login_user FROM OPENQUERY(LASWEB, 'SELECT CAST(u.login_user AS CHAR) AS login_user FROM mydb_name.users AS u') 所以我在 mysql 查询中转换了值,然后就做到了。

标签: mysql sql sql-server type-conversion openquery


【解决方案1】:

像这样转换变量

SELECT login_user  FROM OPENQUERY(LASWEB, 'SELECT CAST(u.login_user AS CHAR) AS login_user  FROM mydb_name.users AS u')

【讨论】:

    【解决方案2】:

    试试这个: SELECT * FROM OPENQUERY(LinkedServer, 'SELECT login_user FROM mydb_name.users')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多