我有一台MySQL服务器作为Microsoft SQL Server 2008中的链接服务器。对于链接,我使用MySQL ODBC连接器版本5.1.8。当使用OPENQUERY
(我发现执行查询的唯一方式)调用查询时,会发生问题。简单的查询,如从Microsoft SQL Server通过ODBC在MySQL中存在SELECT *问题
SELECT * FROM OPENQUERY(MYSQL, 'SHOW TABLES')
工作正常。个别列的选择,例如,
SELECT * FROM OPENQUERY(MYSQL, 'SELECT nr FROM letter')
工作正常,但SELECT *语法不起作用。查询:
SELECT * FROM OPENQUERY(MYSQL, 'SELECT * FROM mytable')
引发错误:
Msg 7347, Level 16, State 1, Line 6 OLE DB provider 'MSDASQL' for linked server 'MYSQL' returned data that does not match expected data length for column '[MSDASQL].let_nr'. The (maximum) expected data length is 40, while the returned data length is 0.
我怎样才能让SELECT *语法的工作?
嗨,Tarek。非常感谢您的回复!事实上,恒定长度的char()字段可能是一个问题。我从MySQL导入的字符串遇到了麻烦,他们似乎用零填充。我现在无法检查,但会在今天或明天尝试您的解决方案。谢谢! – 2010-12-16 12:06:03
另一方面,使用以下命令:exec('Select * From mytable')AT MYSQL将获得显示的数据,但您将无法加入输出或从中进行选择,除非您创建临时表并导出输出到它。出于这个原因,我个人更喜欢openquery。 – 2010-12-16 14:19:26
我刚刚测试了您的解决方案,实际上将CHAR字段转换为VARCHAR会导致错误消失。太感谢了! – 2010-12-17 09:58:36