遇到难题了,等待zjcxc(邹建)大哥帮忙~关于过去提出的SQL2000同步的实现问题
东坡饭 2010-10-05 11:55:15 拜见各位SQL的前辈,我今天搜索到了邹建大哥过去提出的利用存储过程实现两个数据库SQL2000同步的解决方案,之后原帖上的楼主说是做成功了,可我自己做项目的时候却没能成功,遇到很多问题摸不着头脑,请大侠们帮忙解决啊!!
--以下是根据邹建大哥2004年提供的资料,结合我的实例改编的:-----------------------------
/*--同步两个数据库的示例
有数据字段
srv1.库名..Categories有字段:CategoryID,CategoryName,Description(门禁系统的SQL 2000数据库)
srv2.库名..Categories有字段:CategoryID,CategoryName,Description222(局域网内的另一台主机的SQL 2005数据库,IP为192.168.1.88,SQL服务器名称为WWW-E09CC733B36,数据库名称将为模仿2000自带数据库Northwind所自建的Northwind数据库,里边只有一个测试用的表Categories)
要求:
srv1.库名..Categories增加记录则srv2.库名..Categories记录增加记录;
srv1.库名..Categories的Description字段更新,则srv2.库名..Categories对应字段Description222更新;
--*/
/*--
实验一:
--*/
--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步 :
exec sp_addlinkedserver 'WWW-E09CC733B36','','SQLOLEDB','192.168.1.88'
exec sp_addlinkedsrvlogin 'WWW-E09CC733B36','false',null,'sa','pddas2KKo3000oAAAADDAAKRUICMkjd999'
go
create proc p_process
as
--更新修改过的数据
update b set CategoryName=i.CategoryName,Description222=i.Description
from WWW-E09CC733B36.Northwind.dbo.Categories b,Categories i
where b.CategoryID=i.CategoryID and
(b.CategoryName <> i.CategoryName or b.Description222 <> i.Description)
--插入新增的数据
insert WWW-E09CC733B36.Northwind.dbo.Categories(CategoryID,CategoryName,Description222)
select CategoryID,CategoryName,Description from Categories i
where not exists(
select * from WWW-E09CC733B36.Northwind.dbo.Categories where CategoryID=i.CategoryID)
--删除已经删除的数据(如果需要的话)
delete b
from WWW-E09CC733B36.Northwind.dbo.Categories b
where not exists(
select * from Categories where CategoryID=b.CategoryID)
go
/*--
实验一查询分析器反馈的报错信息是:
--*/
服务器: 消息 15028,级别 16,状态 1,过程 sp_addlinkedserver,行 79
服务器 'WWW-E09CC733B36' 已存在。
(所影响的行数为 0 行)
(所影响的行数为 1 行)
(所影响的行数为 0 行)
(所影响的行数为 1 行)
服务器: 消息 170,级别 15,状态 1,过程 p_process,行 7
第 7 行: '-' 附近有语法错误。
/*--
实验二:
--*/
/*--同步两个数据库的示例
有数据字段
srv1.库名..Categories有字段:CategoryID,CategoryName,Description(门禁系统的SQL 2000数据库)
srv2.库名..Categories有字段:CategoryID,CategoryName,Description222(局域网内的另一台主机的SQL 2005数据库,IP为192.168.1.88,SQL服务器名称为WWW-E09CC733B36,数据库名称将为模仿2000自带数据库Northwind所自建的Northwind数据库,里边只有一个测试用的表Categories)
要求:
srv1.库名..Categories增加记录则srv2.库名..Categories记录增加记录;
srv1.库名..Categories的Description字段更新,则srv2.库名..Categories对应字段Description222更新;
--*/
--(如实验一的环境一样)
--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步
exec sp_addlinkedserver 'svr2','','SQLOLEDB','192.168.1.88'
exec sp_addlinkedsrvlogin 'svr2','false',null,'sa','pddas2KKo3000oAAAADDAAKRUICMkjd999'
go
create proc p_process
as
--更新修改过的数据
update b set CategoryName=i.CategoryName,Description222=i.Description
from svr2.Northwind.dbo.Categories b,Categories i
where b.CategoryID=i.CategoryID and
(b.CategoryName <> i.CategoryName or b.Description222 <> i.Description)
--插入新增的数据
insert svr2.Northwind.dbo.Categories(CategoryID,CategoryName,Description222)
select CategoryID,CategoryName,Description from Categories i
where not exists(
select * from svr2.Northwind.dbo.Categories where CategoryID=i.CategoryID)
--删除已经删除的数据(如果需要的话)
delete b
from svr2.Northwind.dbo.Categories b
where not exists(
select * from Categories where CategoryID=b.CategoryID)
go
/*--
实验二查询分析器反馈的报错信息是:
--*/
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 0 行)
(所影响的行数为 1 行)
(所影响的行数为 0 行)
(所影响的行数为 1 行)
服务器: 消息 17,级别 16,状态 1,过程 p_process,行 6
SQL Server 不存在或拒绝访问。
为什么我无论用svr2还是用WWW-E09CC733B36都无法实现邹建大哥的经典案例呢?!我搜了很久觉得邹建大哥的这个存储过程方案是最简洁的,希望能够实现出来,请大侠们多多帮忙分析!!