日期:2014-05-17  浏览次数:20464 次

跨服务器查询
sql库版本【2005】和【2000】
服务器:【用友】和【生产系统】
数据库:【UFDATA_808_2012】和【ld】
用户名:【sa】和【1981】
密码:【pw1】和【pw2】
表:【Inventory】和【cpbm】
关联字段:【Inventory.cInvDefine4】=【cpbm.成品编码】

希望在这样的环境下建立 select * from 用友..,生产系统..查询,这两个服务器在一个局域网里面 ,用查询分析器都可以登录,执行单独数据库的成功。

试验了下面的两方法,没有成功:
方法一:
SQL code
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','用友' 
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','pw1' 
Select * From srv_lnk.用友.dbo.Inventory

以上代码在连接到【用友】的查询分析器里面,成功;到在连接到【生产系统】的查询分析器里面,失败
SQL code
消息 17,级别 16,状态 1,第 1 行
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。


方法二:
 
SQL code
Select cpbm.成品编码 From OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=生产系统;User ID=1981;Password=pw1'
         ).ld.dbo.cpbm
Left Join 
OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=用友;User ID=sa;Password=pw2'
         ).UFDATA_808_2012.dbo.Inventory On cpbm.成品编码=Inventory.cInvDefine4


提示 找不到表:
SQL code
消息 107,级别 16,状态 3,第 1 行
列前缀 'cpbm' 与查询中所用的表名或别名不匹配。
消息 17,级别 16,状态 1,第 1 行
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。



------解决方案--------------------
探讨

引用:

引用:

引用:

单独的使用OPENDATASOURCE 你能连上那个?
用友的还是生产的?
你本机是05还是2000


单独使用OPENDATASOURCE,也是首先要登录对应的数据库查询分析器,然后执行对应的的OPENDATASOURCE,可以成功,交换就不能成功,或放在一个查询分析器里面也不能成功
……