设为首页 加入收藏

TOP

SQLserver使用映射表进行数据相关操作(一)
2015-11-21 01:29:41 来源: 作者: 【 】 浏览:1
Tags:SQLserver 使用 映射 进行 数据 相关 操作
基本需求:
? ? ?老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据,也要更新老数据与现有数据。
-------------------------------------------------
--Author:Oliver QIN
--Date:2015-11-07
--DESC:使用映射表对老数据进行更新
-------------------------------------------------
--存储老数据的表
--drop table TB_old
CREATE TABLE TB_old(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)
--------------------------------------------------------------------
--插入测试数据(2014年的人员信息表) ?
---目前的编号是以省份来编号的,例如下面插入的测试数据
?
?
/*************************老的人力资源管理系统中******************************/
?
INSERT INTO TB_old ?SELECT 1,'yunnan01','JACK','云南昆明',45 ?union all
? ? ? ? ? ? ? ? ? ? SELECT 2,'yunnan02','Tom','云南曲靖',82 ? union all
? ? ? ? ? ? ? ? ? ? SELECT 3,'yunnan03','Alice','云南丽江',60 union all
? ? ? ? ? ? ? ? ? ? SELECT 4,'yunnan04','Jerry','云南昭通',26 union all
? ? ? ? ? ? ? ? ? ? SELECT 5,'chongqin05','Terry','重庆江北',22
? ? ? ? ? ? ? ? ? ? ?
---随着时间的变迁,需要把编号进行修改,统一为China开头的编号,例如:China01
?
--那接着就建立映射表
/*********************************映射表***************************************/
--drop table Mapping
CREATE TABLE Mapping (Old_IdSeq varchar(100),New_IdSeq varchar(100))
--插入映射关系
?
insert into Mapping ?select 'yunnan01','China01' union all
? ? ? ? ? ? ? ? ? ? ?select 'yunnan02','China02' union all
? ? ? ? ? ? ? ? ? ? ?select 'yunnan03','China03' union all
? ? ? ? ? ? ? ? ? ? ?select 'yunnan04','China04' union all
? ? ? ? ? ? ? ? ? ? ?select 'chongqin05','China05'?
? ? ? ? ? ? ? ? ? ? ?
---这是2015年在新人力资源管理系统中新生成的一张信息表 注明:在老系统中已经生成的编号不可以替换成现有编号,需要延用至退休 ? ? ? ? ? ? ? ? ??
--drop table TB_New 注:新的人力资源表中JACK的年龄更新为99,并且新加了JOSN的相关信息
CREATE TABLE TB_New(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)
?
--插入新的测试数据
?/*************************新的人力资源管理系统中******************************/
?
?INSERT INTO TB_New SELECT 1,'China01','JACK','云南昆明',99 ?union all
? ? ? ? ? ? ? ? ? ? ?SELECT 2,'China02','Tom','云南曲靖',82 ? union all
? ? ? ? ? ? ? ? ? ? ?SELECT 3,'China03','Alice','云南丽江',60 union all
? ? ? ? ? ? ? ? ? ? ?SELECT 4,'China04','Jerry','云南昭通',26 union all
? ? ? ? ? ? ? ? ? ? ?SELECT 5,'China05','Terry','重庆江北',22 union all
? ? ? ? ? ? ? ? ? ? ?SELECT 6,'China06','JOSN','广东深圳',25
-------------现在有如下需求
/*********************************************************
? ?随着时间的推移,需要实时的更新他们的相关信息,假设录入该年龄的时间是2014年
? ?2015年系统进行升级,录入的相关信息则按新的规则命名编号,如果年龄大于45岁则不更新相关信息,视为退休
? ?新的系统中已经把老的信息按照新的编码规则进行编码,但是这些信息需要用来上报给总经理查看。
??
*/?
?
/**************************上报 数据库中的信息*******************************************/
?
/*上报库中的信息是以前老的 系统中的数据*/
--drop table Report_Rpt?
?
CREATE TABLE Report_Rpt(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)
?
INSERT INTO Report_Rpt select * from TB_old
/**************************************************************************************
? ? ?要求:使用新的人力资源管理系统中提供的数据对更新上报信息中的年龄
*/
--建立映射视图,用于关联更新
go
--select * from Differrence_Data
CREATE VIEW Differrence_Data
as
select A.Age,B.Old_IdSeq from TB_New A?
?left join ?Mapping B ON ?A.IdSeq=B.New_IdSeq ?
?left join TB_old C ON ?C.IdSeq=B.Old_IdSeq
?WHERE A.Age<>C.Age
?-----------------------------------
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OFFSET & FETCH 下一篇SQL Server 利用锁提示优化Row_nu..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: