跨库数据同步
这是发自联调现场的文章。两套系统现在采用不同的数据结构来存储数据,故而需要使用一种办法来进行数据库的同步。这里我们采用存储过程来实现跨库的同步作业。即B库的B_table表的增删改操作,同步到A库的A_table表。因为两个表的列名即类型大小存在不一致,所以需要在存储过程中进行调试。
--使用sp_helptext查看某触发器具体内容
--exec sp_helptext ‘triggerName';
--查看系统所有的触发器
--select * from sysobjects where xtype='TR'
USE [db_QX]
--删除触发器
drop trigger deleteB2A,insertB2A,updateB2A;
--创建新增记录之后同步的触发器
create trigger insertB2A
on B_table
after insert
as
declare @iiiii nvarchar(5)
declare @archivesno nvarchar(5)
declare @station nvarchar(30)
declare @latitude nvarchar(11)
declare @longitude nvarchar(13)
declare @altitude nvarchar(6)
declare @altitude_p nvarchar(6)
declare @height_windsensor nvarchar(4)
declare @height_windplatform nvarchar(4)
declare @builttime nvarchar(14)
select @iiiii=metadata_identifiers,@archivesno=station_file_number,
@station=station_referred_chinese,@latitude=latitude,
@longitude=longitude,@altitude=station_altitude,
@altitude_p=barometer_altitude,@height_windsensor=wind_speed_sensor_platform_height,
@height_windplatform=observation_platform_height,@builttime=tiem_up
from inserted
begin
--可以使用DB.dbo.Table的形式,访问其它数据库的信息
insert into A_Table(iiiii,archivesno,station,latitude,longitude,altitude,altitude_p,height_windsensor,height_windplatform,builttime,starttime,endtime) values(
@iiiii,@archivesno,@station,@latitude,@longitude,@altitude,@altitude_p,@height_windsensor,@height_windplatform,@builttime,@builttime,'99999999');
END
--删除记录之后同步的触发器
create trigger deleteB2A
on B_table
after delete
as declare @iiiii nvarchar(5)
select @iiiii=metadata_identifiers from deleted
begin
delete from A_Table where iiiii=@iiiii;
END
--修改记录之后同步的触发器
create trigger updateB2A
on B_table
after update
as
declare @iiiii nvarchar(5)
declare @archivesno nvarchar(5)
declare @station nvarchar(30)
declare @latitude nvarchar(11)
declare @longitude nvarchar(13)
declare @altitude nvarchar(6)
declare @altitude_p nvarchar(6)
declare @height_windsensor nvarchar(4)
declare @height_windplatform nvarchar(4)
declare @builttime nvarchar(14)
select @iiiii=metadata_identifiers,@archivesno=station_file_number,
@station=station_referred_chinese,@latitude=latitude,
@longitude=longitude,@altitude=station_altitude,
@altitude_p=barometer_altitude,@height_windsensor=wind_speed_sensor_platform_height,
@height_windplatform=observation_platform_height,@builttime=tiem_up
from inserted
begin
update A_Table set
iiiii=@iiiii,archivesno=@archivesno,station=@station,latitude=@latitude,
longitude=@longitude,altitude=@altitude,altitude_p=@altitude_p,
height_windsensor=@height_windsensor,height_windplatform=@height_windplatform,
builttime=@builttime
where iiiii=@iiiii;
END
--这是测试语句
insert into B_table (
metadata_identifiers,station_referred_chinese,tiem_up,metadata_update_time,WMORegionName,WMORegionNumber,countryAreaName)
values('55555','滕州','19991213','1111-11-11','亚洲','Ⅱ','中国');
delete from B_table where metadata_identifiers='55555';
update B_table set station_referred_chinese ='滕州A' where metadata_identifiers= '55555'
--这是查看代码语句
select * from B_table;
select * from A_Table;
需要注意的是:在查看触发器的时候,需要注意触发器的级别,如服务器、数据库、数据表级别的数据库。执行上述代码时,create trigger 语句必须在执行语句的第一句。另外由于这三个触发器内部使用的变量有重名现象,所以他们不能同时执行,应该顺序依次新建。
补充:综合编程 , 其他综合 ,