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。

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

谢谢。。
...全文
397 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackey 2012-06-21
  • 打赏
  • 举报
回复
那执行效率不高啊
  • 打赏
  • 举报
回复
用 openquery openquery(servername,'query') query 通过外部的string 组合参数
jackey 2012-06-07
  • 打赏
  • 举报
回复
遇到同样问题,请问具体怎么搞定的
  • 打赏
  • 举报
回复
我了个去 搞定
  • 打赏
  • 举报
回复
第一步 在控制面板 - 管理工具 - 数据源ODBC里创建 系统DSN 连接到MYSQL的对应数据库里. 用户为root

第二步 在MSSQL2000中创建连接服务器. 数据源填入的是 第一步创建的 系统DSN名字,使用远程登录帐户为root

然后可以在MSSQL的连接服务器 看到所创建的MYSQL, 可以列出MYSQL的所有database 和表....

不过我发现在MSSQL management工具里.在连接服务器中.选择MYSQL的表右键选择 编写表脚本为..然后选择SELECT 到 新的编辑查询窗口

MSSQL 提示说

-- [连接服务器名].[servername]..[tablename] 不包含可以选择的列,或者当前用户不拥有对该对象的权限。
GO
是否是权限的问题..... 不过同样的帐户在MYSQL客户端上登录,都可以看到完整的表结构和数据.



服务器的MSSQL是2000版本的 本地的SQL2008 同样的连接服务器 成功但是也没有权限编写表脚本.查询也是一样出错

在MSSQL 里执行

SELECT * from [链接服务器名].[database名].[table名]
结果提示
对象名 [链接服务器名].[database名].[table名] 无效


SELECT * from [ServerName].[server]..[tablename]

提示说 对象[ServerName].[server]..[tablename] 不存在




如果换一种方法 如下:
SELECT *
FROM OPENQUERY(链接服务器名,'SELECT * FROM [database名].[table名]')
是可以成功的.


如果用openquery openquery(servername,"query") query中不支持输入参数 也不支持@strSQL.

只能执行固定好的SQL语句.而且不能在外面配置.

明确的说 openquery 没办法满足我开发的需要...

现在总结下我的问题
1. MSSQL连接MYSQL 为了是实时获取MYSQL的数据 只查询用.. 是否有其他可行的方案
2. SELECT * from [ServerName].[server].[tablename] 要做如何修改才能使用 或是有其他方法可以传入参数的直接查询MYSQL的表.或是执行SQL语句





  • 打赏
  • 举报
回复
谢谢其他各位的解答和支持
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ap0405140 的回复:]
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题
--> 用[链接服务器名].[database名].[用户名].[table名]或[链接服务器名].[用户名].[table名]

第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构
--> 试试select cast([原字段] as [类型]([长度……
[/Quote]

第二个问题
select X from openquery(连接服务器名,'select cast(X as Varchar(8)) as X from server.Table‘) 提示

[OLE/DB provider returned message: [MySQL][ODBC 5.1 Driver][mysqld-5.1.53-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Varchar(8)) as X from server.Table' at line 1]
OLE DB 错误跟踪[OLE/DB Provider 'MSDASQL' IColumnsInfo::GetColumnsInfo returned 0x80004005: ]。
消息 7399,级别 16,状态 1,第 1 行
OLE DB 提供程序 'MSDASQL' 报错。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ap0405140 的回复:]
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题
--> 用[链接服务器名].[database名].[用户名].[table名]或[链接服务器名].[用户名].[table名]

第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构
--> 试试select cast([原字段] as [类型]([长度……
[/Quote]

第一个问题 加了用户名后提示
消息 7312,级别 16,状态 1,第 1 行
对 OLE DB 提供程序 'MSDASQL' 的架构和/或目录的使用无效。提供了由四部分构成的名称,但提供程序并未表现必要的接口来使用目录和/或架构。
水族杰纶 2012-01-10
  • 打赏
  • 举报
回复
select *
from 链接服务器名.数据库名.架构名.表名
勿勿 2012-01-10
  • 打赏
  • 举报
回复
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题

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

cast()处理
永不言弃SUN 2012-01-10
  • 打赏
  • 举报
回复
需要用 EXEC sp_addlinkedserver '远程服务器IP','SQL Server' --添加链接
EXEC sp_addlinkedsrvlogin '远程服务器IP','false','sa','架构名','访问密码' --添加登陆串
唐诗三百首 2012-01-10
  • 打赏
  • 举报
回复
第一 请问如何解决 SELECT * from [链接服务器名].[database名].[table名] 出错的问题
--> 用[链接服务器名].[database名].[用户名].[table名]或[链接服务器名].[用户名].[table名]

第二: 请问这种应该如何解决。表和字段很多,尽量是不要修改数据库结构
--> 试试select cast([原字段] as [类型]([长度])) from ...
  • 打赏
  • 举报
回复
如果有更好的方案可以解决MSSQL获取MYSQL的实时数据....请提供 不胜感激
唐诗三百首 2012-01-10
  • 打赏
  • 举报
回复
sorry,没有mysql环境可以测试,
请有环境的大侠帮忙一下.

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧