请高手进来,跨服务器数据库的数据读取问题

liqiang010 2003-10-17 02:39:41
我们公司有多个数据服务器,每个服务器上有多个数据库
sql server200),现在想在其中一个中央服务器上做其他服务器上的数据库数据汇总,想在中央服务器作一个存储过程,用(select..insert)实现,所以涉及到一个跨服务器数据库的数据读取问题,大家有什么好的办法么,写个存储过程的事例可以么。
...全文
60 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiang010 2003-10-20
  • 打赏
  • 举报
回复
怎么没有人回答阿,我等着结单呢
liqiang010 2003-10-20
  • 打赏
  • 举报
回复
呵呵,经过邹建兄的点拨,现在可以实现了,但是,还有有一点不足,就是,怎么样判断把已经存在的链接服务器关闭呢。
pengdali 2003-10-20
  • 打赏
  • 举报
回复
一般联结服务器不用删除,如果要的话:

sp_droplinkedsrvlogin @rmtsrvname = '192.168.18.37', @locallogin = 'sa'
go
sp_dropserver '192.168.18.37'
GO

判断:

if exists(select 1 from master.dbo.sysservers where srvname='服务名')
sp_dropserver '服务名'
pengdali 2003-10-20
  • 打赏
  • 举报
回复
select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
bondhu 2003-10-20
  • 打赏
  • 举报
回复
帮你UP!
zjcxc 2003-10-18
  • 打赏
  • 举报
回复
--改为:
SELECT a.*,dbo.Product.productname
FROM a.scMis.dbo.OutStockBillDetail a INNER JOIN
dbo.Product Product ON
a.ProductID = dbo.Product.ProductID
liqiang010 2003-10-17
  • 打赏
  • 举报
回复
--从效率上考虑,最好创建链接服务器.
--exec sp_addlinkedserver 'a','','SQLOLEDB','TXY'
--exec sp_addlinkedsrvlogin 'a','false',null,'sa','victor'
go

--然后,查询远程服务器上的数据就用:
--select * from sl_别名.数据库名..表名

SELECT a.scMis.dbo.OutStockBillDetail.*,dbo.Product.productname
FROM a.scMis.dbo.OutStockBillDetail OutStockBillDetail INNER JOIN
dbo.Product Product ON
a.scMis.dbo.OutStockBillDetail.ProductID = dbo.Product.ProductID
go



错误提示:
服务器: 消息 117,级别 15,状态 2,行 5
数字 名称 'a.scMis.dbo.OutStockBillDetail' 包含的前缀数目超过了最大值。最大值为 3。
liqiang010 2003-10-17
  • 打赏
  • 举报
回复
上面的那个沾错了
liqiang010 2003-10-17
  • 打赏
  • 举报
回复
--从效率上考虑,最好创建链接服务器.
--exec sp_addlinkedserver 'a','','SQLOLEDB','TXY'
--exec sp_addlinkedsrvlogin 'a','false',null,'sa','victor'
go

--然后,查询远程服务器上的数据就用:

SELECT a.scMis.OutStockBillDetail.*,dbo.Product.productname
FROM a.scMis.OutStockBillDetail OutStockBillDetail INNER JOIN
dbo.Product Product ON
a.scMis.OutStockBillDetail.ProductID = dbo.Product.ProductID
LoveSQL 2003-10-17
  • 打赏
  • 举报
回复
可以使用opendatasource

使用linked server
都可以解决。
zjcxc 2003-10-17
  • 打赏
  • 举报
回复
你的语句是怎么写的? 如果写得不正确,就有可能出错.
liqiang010 2003-10-17
  • 打赏
  • 举报
回复
系统提示错误,包含的前缀数目超过了最大值。最大值为 3
liqiang010 2003-10-17
  • 打赏
  • 举报
回复
谢谢大家,踏网无痕说得很好,邹建兄的建议很有道理,我现在就试试,回头给分。
txlicenhe 2003-10-17
  • 打赏
  • 举报
回复
1:服务器操作

EXEC sp_addlinkedserver
'Test', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=服务器名;UID=sa;PWD=密码;'
GO
-------以上为添加连接服务器

exec sp_addlinkedsrvlogin 'test','false','sa','sa',''

然后就可以

Select * from server1.database1..table1

Select * from server2.database2..table2


zjcxc 2003-10-17
  • 打赏
  • 举报
回复
--从效率上考虑,最好创建链接服务器.
exec sp_addlinkedserver 'sl_别名','','SQLOLEDB','远程服务器名'
exec sp_addlinkedsrvlogin 'sl_别名','false',null,'sa','密码'
go

--然后,查询远程服务器上的数据就用:
select * from sl_别名.数据库名..表名
yujohny 2003-10-17
  • 打赏
  • 举报
回复
insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
yujohny 2003-10-17
  • 打赏
  • 举报
回复
1:建立链接服务器
EXEC sp_addlinkedserver
'链接名',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=对方ip;UID=sa;PWD=密码;'
(注意是登陆对方服务器的密码)
GO
2:授权访问
EXEC sp_addlinkedsrvlogin '链接名','false'
3:访问
insert into 链接名.数据库名..表 select * from 本地表名
yujohny 2003-10-17
  • 打赏
  • 举报
回复

select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

22,210

社区成员

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

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