sql 查询远程数据库的问题

怎样查询远程数据库的表数据
财务数据库,有很多帐套。
我怎样远程查询所有帐套的某个表的信息,数据库名称不一样,但是数据库结构一样,比如查询凭证

远程数据库地址:jqserver,数据库用户名sa 密码为空,现在我要在本机的sql查询分析器上查询远程库的所有用友帐套的凭证信息,请问在查询分析器中怎样来写这个sql语句
远程数据库共有150个数据库,凭证表的结构都一样。

作者: sichuanzog   发布时间: 2011-06-16

SQL code

--1.
--连接远程/局域网数据(openrowset/openquery/opendatasource) 
--1、openrowset 

--查询示例 
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名) 


--2.
--创建链接服务器 
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址' 
exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '用户名' , '密码' 

--查询示例 
select * from ITSV.数据库名.dbo.表名 

作者: zy112429   发布时间: 2011-06-16

引用 1 楼 zy112429 的回复:
SQL code

--1.
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名)


--2.
--创建链接服务器
……


这里有多个数据库,不只一个数据库,应该是150个库

作者: sichuanzog   发布时间: 2011-06-16

引用 2 楼 sichuanzog 的回复:
引用 1 楼 zy112429 的回复:
SQL code

--1.
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名)


……
远程查询跟多少库没关系,需要那个库,只修改数据库名.dbo.表名就可以

作者: zy112429   发布时间: 2011-06-16

远程数据库地址:jqserver,如果是在局域网,可以使用机器名访问,
否则查询分析器连接时,应使用ip地址

作者: cd731107   发布时间: 2011-06-16

如果已经连接上了,就可以像本地一样操作了

作者: cd731107   发布时间: 2011-06-16

引用 2 楼 sichuanzog 的回复:
引用 1 楼 zy112429 的回复:
SQL code

--1.
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名)


……


150个库就要 改150次啊,能不能自动取到在master库中取到数据库名然后循环执行呢

作者: sichuanzog   发布时间: 2011-06-16

用友跨年加库这个机制的确挺恶心的。。。。。。。。。

可以使用动态sql,自动生成150个select的sql,变化的只是库名
SQL code
select '库1' as fDatabase,* from 链接服务器.库1.dbo.table1
union all
select '库2' as fDatabase,* from 链接服务器.库2.dbo.table1
...
union all
select '库n' as fDatabase,* from 链接服务器.库n.dbo.table1

作者: sz_haitao   发布时间: 2011-06-16

引用 6 楼 sichuanzog 的回复:
引用 2 楼 sichuanzog 的回复:
引用 1 楼 zy112429 的回复:
SQL code

--1.
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '……

纠结的地方出项了,就是不知道这个动态的sql怎么通过循环来得到

作者: sichuanzog   发布时间: 2011-06-16

也来学习下

作者: sslas   发布时间: 2011-06-16

150个库名没规律?
预先建一个表,每条记录就是一个库名
或者使用sp_databases列

作者: sz_haitao   发布时间: 2011-06-16

引用 9 楼 sslas 的回复:
也来学习下


我现在就是不知道怎样把所有数据库名读出来并且组合成动态的sql语句,

作者: sichuanzog   发布时间: 2011-06-16