我们公司有A,B,C,...多个分公司,每个分公司都有自已的SQL服务器,目前通过VPN联到一个局域网内。
A是总公司的服务器。
总公司在下订单时,都存盘在A服务器中,当然在下订单时,先会指定分公司的名称B,C,D,E....
当一个订单指定公司名为A时,我只需要存盘在A数据库中,不需要再转存到其它几个数据库中去;
当一个订单指定公司名为B时,我除了需要存盘在A数据库中外,还需要再转存到B数据库中去;
当一个订单指定公司名为C时,我除了需要存盘在A数据库中外,还需要再转存到C数据库中去;
... ...
每个分公司在接到订单之后,都只在自已的SQL服务器中操作了,不需要再连线总公司的SQL数据库。
A服务器的IP是: 192.168.0.201, 数据库名称是:AA_data,表名称:my_table(id_no, mingch, shul, danj, bb)
B服务器的IP是: 192.168.0.152, 数据库名称是:BB_data,表名称:my_table(id_no, mingch, shul, danj, bb)
C服务器的IP是: 192.168.0.254, 数据库名称是:CC_data,表名称:my_table(id_no, mingch, shul, danj, bb)
ABC三台SQL服务器上,有相同名称的表my_table,表字段结构完全相同, id_no是表的主键值。
现在的需求是:
当用户给A服务器,AA_data.my_table添加/修改/删除一条记录时,我想在A服务器上执行一个存储过程PR_aa_to_bb, 给B服务器BB_data.my_table表中,也自动添加/修改/删除相同的记录。
也就是说,我希望在A服务器上,通过调用存储过程PR_aa_to_bb来连通B服务器,从而实现将指定的记录,同步更新到B服务器上。
请问这个存储过程PR_aa_to_bb要如何写?
如果数据库AA_data同BB_data在同一台服务器192.168.0.201上的话,我测试使用如下语句可以实现我的需求。
CREATE PROCEDURE [PR_aa_to_bb] @table_name char(10), @field_id char(10), @lc_add1_edit2_del3 char(1)
AS
begin
[email protected]_name ID字段名称;@field_id ID号; @lc_add1_edit2_del3 1新增2修改3删除
if @table_name = 'my_table'
begin
if @lc_add1_edit2_del3 = '1'
begin
INSERT INTO BB_data.dbo.my_table(id_no, mingch, shul, danj, bb)
select id_no, mingch, shul, danj, bb
from AA_data.dbo.my_table a
where id_no = rtrim(ltrim(@field_id))
end
else
if @lc_add1_edit2_del3 = '2'
begin
update b SET mingch = a.mingch, shul = a.shul, danj = a.danj, bb = a.bb
from AA_data.dbo.my_table a
left outer join BB_data.dbo.my_table b on a.id_no = b.id_no
where a.id_no = rtrim(ltrim(@field_id))
end
else
if @lc_add1_edit2_del3 = '3'
begin
delete BB_data.dbo.my_table where id_no = rtrim(ltrim(@field_id))
end
end
end
GO
AA_data.my_table表中有100条记录,但我可能只要将其中30条,同步到BB_data.my_table表中去的。
所以使用“发布/订阅”好象不合适。
但现在的问题是,两个数据库分别在两台服务器上,这个语句要如何写呢?
请各位大师指点一下。
------解决方案--------------------