日期:2014-05-18  浏览次数:20507 次

mssql2000链接服务器MYSQL的诸多问题
各位好:
  公司需要,必须通过MSSQL获取到MYSQL的实时数据.
 我的方案是 通过链接服务器来实现. 通过ODBC链接到MYSQL之后.在MSSQL里查询,例如
SELECT * from [链接服务器名].[database名].[table名]
结果提示 
对象名 [链接服务器名].[database名].[table名] 无效  
在MYSQL客户端上查询 select * from [database名].[table名]是可以成功的

如果换一种方法 如下:
SELECT * 
  FROM OPENQUERY(链接服务器名,'SELECT * FROM [database名].[table名]')
是可以成功的.
但是这种方法很不方便... 因为SQL的语句是写成字符串的. where参数和需要关联到其他表格语法
都需要做特别的处理。

第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题

MYSQL 的A表的字段X为CHAR(8) 结果数据库里只保存了比如 1234 在MYSQL查询不会有问题。
在MSSQL里查询
SELECT * 
  FROM OPENQUERY(链接服务器名,'SELECT * FROM [database名].[A]')
 就提示
OLE DB 提供程序 'MSDASQL' 返回了固定长度列 '[MSDASQL].X' 的意外数据长度。预期的数据长度为 16。而返回的数据长度为 8。

第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构  

谢谢。。


------解决方案--------------------
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题
--> 用[链接服务器名].[database名].[用户名].[table名]或[链接服务器名].[用户名].[table名]

第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构
--> 试试select cast([原字段] as [类型]([长度])) from ...
------解决方案--------------------
需要用 EXEC sp_addlinkedserver '远程服务器IP','SQL Server' --添加链接
EXEC sp_addlinkedsrvlogin '远程服务器IP','false','sa','架构名','访问密码' --添加登陆串
------解决方案--------------------
SQL code
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题

           加个用户名
第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构   

    cast()处理

------解决方案--------------------
SQL code
select *
from 链接服务器名.数据库名.架构名.表名