SQL Server BI Step by Step SSIS 4 ---合并数据3

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

   我们已经介绍了三种方法来实现数据流源和数据库数据的合并,也就是Excel中的数据和数据库里面的数据进行同步,存在的数据进行更新操作,不存在的添加数据,另外还可以扩展为,如果数据库为的数据在Excel数据源中不存在,则执行删除操作.接下来我们来介绍其它的方法来实现这样的目标.
     我们在合并数据1中曾经介绍过,直接通过Merge和Merge Jone是无法直接实现的,不过我们可以通过变通的方法实现.首先我们新建一个包MergeDataMerge,像之前一样,象上次一样,准备控制流,变量和连接管理器.其实前面和合并数据1中的MergeData2一样,将Excel数据源和数据库表数据根据ProductNumber字段进行合并.
     screenshot23

     这里我们选的是完全外部连接,这样才能完全合并两边的数据.当一方数据没有匹配的数据时,有NULL代替.所以我们直接根据合并后的ProductNumber和NewProductNumber 就可以直接这行数据应该对应的是添加,更新,还是删除.在Merge Join组件下面,我们添加Conditional Split组件,这个组件来判断对于不同的情况的分支:
     screenshot24

      很简单,当行中对应的ProductNumber为NULL时,说明没有从数据库时面查到匹配的数据,所以这条数据应该进行新增操作,当NewProductNumber为NULL时,说明Excel数据源中不存在数据库中ProductNumber对应的数据,所以此条数据应该进行删除,最后,如果两个ProductNumber相同,则应该进行更新操作.这里需要注意的是,一定要把两个判断ISNULL的条件放在前面,因为我们在第三个里面用到了TRIM,如果为NULL值时,会有错误发生.
      screenshot25

   接下来我们介绍一下使用SCD Component怎么来实现这个,我们先建一个包MergeDataSCDComponent,同样,准备好其它的资源,然后拖动Slowly Changing Dimension组件进来,双击这个控件进行设置,我们会发现,这类似于一个安装程序,可以一步一步的设置,点击下一步,首先我们需要选择数据连接管理器,然后再设置业务键,在这里我们设置ProductNumber列作为业务键:
    screenshot26

     再点击下一步,在这里我们可以选择数据源中的列,然后设置此列的更改类型,分为固定,变化还是历史,在左面已经列中不同的类型的详细说明:
    screenshot27

   可以看到这个组件很强大,可以针对不同的更改类型做出这么多的区分,我们再点击下一步,看到在这里可以设置,如果固定类型的属性更改时是否转换失败,变化的属性更改时,是否更改所有的匹配记录.
   screenshot28
   我们直接下一步,然后完成整个配置,可以看到,Slowly Changing Dimension下面多出来了三个分支,就象我们前几次实现的一样,只不过这次是全部配置完成的.虽然下面的其中的两个组件名显示的是英文(估计是没有对应的中文翻译),不过还是相应强大的.
   screenshot29 
     我们来看一下插入目标这个组件,自动生成的只是一个OLE DB目标组件,然后已经把字段映射好了,而且对于一些特殊的列已经自动进行了忽略(考虑的还真周到).其它的两个更新的操作,都是生成的OLE DB Command组件,而且自动生成了SQL语句.
      screenshot30

        我们运行一个这个包,发现能够自动的判断数据是否更新,还是插入:
        screenshot31

       好了,到现在为止,合并数据就介绍完了.

     本次项目文件下载.(for Vs 2005)

 

作者:孤独侠客似水流年
出处:http://lonely7345.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: SQL Server

本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2009/03/11/1408353.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
774 43
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
277 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
4月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
8月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
224 4
|
3月前
|
存储 人工智能 分布式计算
数据不用搬,AI直接炼!阿里云AnalyticDB AI数据湖仓一站式融合AI+BI
阿里云瑶池旗下的云原生数据仓库AnalyticDB MySQL版(以下简称ADB)诞生于高性能实时数仓时代,实现了PB级结构化数据的高效处理和分析。在前几年,为拥抱大数据的浪潮,ADB从传统数仓拓展到数据湖仓,支持Paimon/Iceberg/Delta Lake/Hudi湖格式,为开放的数据湖提供数据库级别的性能、可靠性和管理能力,从而更好地服务以SQL为核心的大规模数据处理和BI分析,奠定了坚实的湖仓一体基础。
|
4月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
4月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
|
6月前
|
SQL 数据挖掘 关系型数据库
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
236 12
|
5月前
|
SQL DataWorks 数据管理
SQL血缘分析实战!数据人必会的3大救命场景
1. 开源工具:Apache Atlas(元数据管理)、Spline(血缘追踪) 2. 企业级方案:阿里DataWorks血缘分析、腾讯云CDW血缘引擎 3. 自研技巧:在ETL脚本中植入版本水印,用注释记录业务逻辑变更 📌 重点总结:
|
6月前
|
SQL 数据采集 资源调度
【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
爬虫爬取抖音和快手的短视频数据时,如果遇到数据缺失的情况,如何使用 SQL 语句完成数据的补全。
162 5