• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

跨数据库查询问题

pgz_007 2008-06-13 09:54:28
sql server 组下面有两个注册的服务器,一个是本地的,一个是另外一台机的。
我现在想比较这个两个服务器中同数据库名的某个数据表的数据。
比如:server1中有个数据库database1,下面有个表为table1,表中有字段为主键(key)、数量(number)、日期(date)
server2中也有个数据库database1,下面有个表也为table1,表中有字段为主键(key)、数量(number)、日期

两个数据库结构和字段全部一模一样,我只是想对比这两个table的数据记录有什么不同(记录数还有同一主键的数量是否一致),请问我该怎么做??

(因为有一个数据库是我倒闸过来的数据)
...全文
687 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hery2002 2008-06-14
疯子还真会活学活用哇,
风才贴出来,你就搬过来了,
吼吼~~
-----------------
PS:
一种方式,如前所说,创建Linked Server.然后查询,
另外一种方式,如果表不多的话,
可以导入到另外一个库的临时表中,直接在一个库中比较即可.
回复
fcuandy 2008-06-14
sp_addlinkedserver或openrowset之类语句。
参见分布式查询
回复
律己修心 2008-06-14
如果要用
sp_addlinkedserver
就把这个语法背下来


set nocount on
exec sp_addlinkedserver 'TestSrv','','SQLOLEDB','172.17.17.17'
exec sp_addlinkedsrvlogin 'TestSrv','false',null,'test','test'
go
select top 10* from TestSrv.account.account.MstNew_FeeContract
/*
--删除连接的服务器
exec sp_dropserver 'TestSrv','droplogins'
*/
set nocount off

回复
M1CR0S0FT 2008-06-14
如果是2005以上版本,可以使用tablediff工具比较差异,包括结构,和数据差异,详情请参考Books Online.
回复
律己修心 2008-06-14
--server1中执行
--看数据件数
select count(*) from database1..table1
select count(*) from openrowset('sqloledb','S2IP';'S2userid';'S2psd',select * from database1..table1)
--找不同的数据
select * from database1..table1 t
where exists
( select 1 from opendatasource('sqloledb','data source=S2IP;user id=S2userid;password=S2psd').database1..table1)
where pkey=t.pkey and date=t.date and number<>t.number)
--openrowset与opendatasource性质一样,语法不同

/*
S2IP,S2userid,S2psd把这些换了
未测试
如果有语法错误,请参见联机帮助
应该没有问题
*/

回复
lff642 2008-06-13
先根据2楼的方法:建立链接服务器.

然后就可以像操作本地的表一样,操作链接服务器上的表.

访问要加链接服务器名前缀:链接服务器名.dbname.dbo.tbname
回复
wzy_love_sly 2008-06-13
--遠程連接操作
/******************************************************************************************************************************************************
Tab表:
/*
ID 自增列 Name
----------- ---------
1 a
2 b
3 c
*/
存儲過程:
/*
create proc P
as
select top 10 ID,Name from sysobjects
*/

整理人:中國風(Roy)

日期:2008.06.06
******************************************************************************************************************************************************/

--遠程鏈接服務器機器名:Roy;實例名:Roy\SQL2005DE;登陸名:sa;密碼:Test2005;

--創建鏈接服務器
EXEC master.dbo.sp_addlinkedserver @server = N'ROY_LNK', @srvproduct=N'ROY_LNK', @provider=N'SQLOLEDB', @datasrc=N'Roy\SQL2005DE'--SQL05可用SQLNCLI\SQLOLEDB
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ROY_LNK', @locallogin = NULL , @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'Test2005'
GO

--刪除鏈接服務器
--exec sp_dropserver 'roy_lnk','droplogins'

--Select
select * from roy_lnk.test.dbo.Tab

--insert
insert roy_lnk.test.dbo.Tab(Name)--指定列
Values('d')

--update
update roy_lnk.test.dbo.Tab set Name='DD' where Name='d'

--delete
delete roy_lnk.test.dbo.Tab where Name='DD'

用openrowset:

--支持存儲過程
select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005','test.dbo.p')a


--select
select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)a


--insert
insert openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)(Name)values('EE')

--update
update openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) set Name='EEE' where Name=N'EE'

--delete
delete openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) where Name=N'EEE'


用openquery:--支持存儲過程

--支持存儲過程
select * from openquery(roy_lnk, 'test.dbo.P')


--select
SELECT * FROM openquery(roy_lnk, 'SELECT * FROM test.dbo.tab')

--insert
insert openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') (Name) values('F')

--update
update openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') set Name='FF' where Name='F'

--delete不支持是根據 OLE DB 提供者的功能而定
--delete openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') where Name='FF'



用OPENDATASOURCE:

--支持存儲過程
select * from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').'test.dbo.p'

--select
select * from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab

--insert
insert OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab(Name) values('H')

--update
update OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab set Name='HH' where Name='H'

--delete
delete OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab where Name='HH'


--與本機表數據對比時用別名
select * from roy_lnk.test.dbo.Tab a join tab b on a.ID=b.ID
回复
用链接服务器,具体看联机帮助
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-06-13 09:54
社区公告
暂无公告