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

如何对比不同服务器上的两个表内的数据?
我现在遇到的问题是:
1、服务器A,有一个表1,表1的结构如下:
name(主键)      flag
A              0
B              0
C              1
D              1
E              1
F              1
G              0
H              0
2、服务器B,有一个表2,表2的结构如下:
name(主键)
A
C
E
3、我现在想将服务器A的表1的flag的值,凡是在服务器B,表2内的,都修改为1,不在的都修改为0.
---------------------
目前的做法:
1、检索出来表2的所有值。
2、利用循环通过程序将表1的flag修改为1;
3、检索出来表1的flag为1的值,利用循环,把不在表2的值修改为0.
我觉得这样做有点麻烦了。
不知各位有没有什么好的方法?谢谢!!

------解决方案--------------------
在服务器A建立服务器B的连接服务器
然后直接运行语句

update a set
  flag = case when b.name is not null then 1 else 0 end
from 表1 a
left join 服务器B.dbname2.dbo.表2 b
on a.name = b.name
------解决方案--------------------
创建一个链接服务器,跨库查询,看你的目前做法你应该能实现跨库查询了

可以首先将A表中flag全部改0,然后再将B服务器上有的改1

update tb set flag=1 where name in
(select name from [B].[B库].dbo.tb)