【发布时间】: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