使用SSIS创建同步数据库数据任务

2023-11-08

SSIS(SQL Server Integration Services)是用于生成企业级数据集成和数据转换解决方案的平台。使用 Integration Services 可解决复杂的业务问题,具体表现为:复制或下载文件,发送电子邮件以响应事件,更新数据仓库,清除和挖掘数据以及管理 SQL Server 对象和数据。这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求。Integration Services 可以提取和转换来自多种源(如 XML 数据文件、平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标。 

下面我使用SSIS来演示一个实际例子。比如我有一个数据库,出于备份数据或者其它的目的,会定期的对这个数据库的数据迁移到其它的数据库去。迁移的时候,有些新增的字段会被插入备份数据库,而有些被修改过的字段也会在备份数据库被修改。现在我们就用SSIS来完成这项任务。

首先在我源数据库db_source和目标数据库db_destination中运行以下SQL创建好需要的表,就以这一个表test_1来进行示范。

CREATE TABLE [dbo].[test_1](
    [Id] [int] IDENTITY(1,1) NOT NULL primary key,
    [Name] [varchar](50) NULL,
    [Age] [int] NULL
)

 

建好表好在源数据表中可以随便加几条记录,目标数据库暂时留空。

现在我们打开VS,创建一个Intergration Services Project。(注意:如果SQL Server 装的是Express版的话是没有这个项目工程模板的)

 

创建好工程后,在Control Flow这个Tab下拖入一个Data Flow Task,如下图:

 

双击这个Data Flow Task,我们就会进入Data Flow这个Tab标签中。

 

然后我们在左边工具栏里找到OLE DB Source,继续拖两个OLE DB Source出来。分别给它们命名为Source DB和Destination DB。

 

将数据源拖出来后,双击它,可以对它进行一些设置,主要就是链接数据库及选择你要进行迁移的表或者视图等设置,这里我就不详细说明了。注意一点的是就像上图所示,如果一个图形上出现一个红X的话说明设置有错误。

再来就是拖两个Sort及一个Merge Join出来,将之前的数据源箭头分别指向两个Sort,最后两个Sort出来的数据同时输入Merge Join中。

 

分别双击两个Sort,钩选表中的ID,对ID这个字段进行一次排序。因为Merge Join这个流程要求输入的数据是已排序好的。这个排序也可以直接在数据源中对它们的输出字段设置SortKeyPosition这个属性来排序这里我们第一次从Sort拉箭头到Merge Join的时候,会让我们选择这个输入的数据是作为左输入还是右输入,我们按照图示的那样,左边的作为左输入,右边的作为右输入。然后我们双击Merge Join,按照如下图所示设置:

 

这里打钩的是这个流程之后输出的数据,Join Type需要选择为Left outer join,因为左边是我们的原始数据表,右边是我们备份的表,右表可以看成是一个左表的一个子集,如果左表有的数据,右表没有的,那些就是需要新插入备份数据库的数据。本文来自http://www.14271.com/bcnews/bw/20120918334.html

现在我们需要一个分支,即新的数据需要插入备份数据库中,而已有的数据需要更新为新的值。我们从工具栏中拖入一个Conditional Split来进行这样的分支处理。我们将Merge Sort中的输出指向Conditional Split,然后双击Conditional Split,如下图所示设置(注意条件一个是ISNULL,一个是非ISNULL)。

 

这时它们的输入值就被分成两种条件输出,最后我们再拖入一个OLE DB Destination来插入数据和一个OLE DB Command来更新数据库,最终流程如下图:

 

 

双击设置OLE DB Destionation,选择好数据导入的目标数据库中的表,这里需要注意的就是要钩选Keep identity这个选项,因为我创建表的时候对ID字段使用了自增属性。

双击设置OLE DB Command,首先在Connection Managers这个Tab中选择好链接对象,然后在Component Properties这个选项卡中,设置你的SqlCommand属性。如下图:

 

这里的参数值都是用?号来代替,之后在Column Mappings这个Tab中设置代替值实际代替的列,如下图:

 

至此,任务就创建完毕了,没有编写任何代码,直接拖拉完成了。现在可以直接在VS中按F5运行看下效果,我们的目标数据表将插入源数据表中的值。然后我们修改一下原数据表,再来运行一下上面这个任务,就可以在目标数据库中看到更改了。

 

那么如何去定时完成任务哩?这里可以用SQL Server Agent去调用上面我们写好的包, 或者在Windows计划任务中使用DTExec.exe去执行上面的任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用SSIS创建同步数据库数据任务 的相关文章

  • 如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

    我的要求是这样的 假设我当时正在拨打一个号码 并且我想以编程方式拨打另一个号码 到目前为止 我所做的是 当某些呼叫已经进行时 我能够呼叫特定号码 例如 假设我正在拨打号码 123 1 分钟后 通过使用Alarm Manger我触发一个事件来
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • SSIS 将字符转换为布尔值/位

    我有一个SSIS包来加载数据 您可能还记得 当我尝试将数据文件中的标志作为位标志加载到 SQL Server 中时 这些标志作为 Y N char 1 存在 我将数据文件中的列指定为String DT STR 我有一个数据转换任务 根据以下
  • 非等值连接 - 比较 R 中的两个数据帧

    我想根据第二个数据框中存在的值过滤数据框 例如 匹配第一个数据帧中 BP 列中高于 start pos 列的第一个值且小于 end pos 列或仅小于第二个数据中的 end pos 的行框架 我需要对第二个数据框中的所有值重复此过程 目前
  • 为什么MERGE语句的目标表不允许启用规则?

    我们有一个使用以下 SQL 更新数据库的过程 IF NOT EXISTS SELECT FROM Target Table WHERE Target Table ID BEGIN INSERT END ELSE BEGIN UPDATE E
  • 覆盖SSIS环境变量

    我已经设置了一个包配置 其中配置类型为 间接 XML 配置文件 环境变量指向的位置C SSIS MasterConfig MasterConfig dtsConfig file 这非常有效 并且可以轻松地从测试迁移到 UAT 再到生产 问题
  • Git 命令查找哪些分支合并到当前分支以及何时合并

    我有几个功能分支正在自动合并到集成分支中 我想知道这种情况是否以及何时发生 我可以打字git log这将向我显示合并已经发生 但由于某种原因 它没有向我显示来自哪个功能分支 它只是说 将integration branch合并到integr
  • TFS 2010 API - 从合并中获取工作项

    我需要在 TFS 2010 中的构建完成时发送一封电子邮件 其中详细说明与已作为此构建的一部分进行编译的签入相关的工作项 通过使用这没有问题associatedChangesets构建工作流程中可用的变量 但是 在生产情况下 我们会将开发分
  • GitHub 恢复或重置? [复制]

    这个问题在这里已经有答案了 正如您在图片中看到的 我正在功能 forum kolo 3 中工作 我决定完成该功能并将其合并到开发中 但没有将更改推送到远程开发 因此它只是本地更改 然后我意识到这是一个坏主意 现在我想删除这个合并 就像它从未
  • 如何欺骗 git-svn 来识别使用 svn 进行的合并?

    我们有一个 SVN 设置 具有稳定的主干和不稳定的开发分支 开发工作 大部分 在分支上完成 然后在部署之前合并到主干 我使用 git svn 作为我的 SVN 客户端 我从unstable到trunk的合并过程如下 git svn fetc
  • 如何在 SSIS 脚本任务中传递自定义对象列表?

    我有一个脚本任务 它创建自定义对象列表并将它们设置为 SSIS 对象变量 定制类 public class Dog public string Name get set 用于填充列表并设置为 SSIS 对象变量 myDogs 的代码 pub
  • 联合超过 2 个 pandas 数据框

    我正在尝试将 sql 查询转换为 python sql语句如下 select from table 1 union select from table 2 union select from table 3 union select fro
  • MySQL JOIN 的评估顺序是什么?

    我有以下查询 SELECT c FROM companies AS c JOIN users AS u USING companyid JOIN jobs AS j USING userid JOIN useraccounts AS us
  • Tensorboard 和 Dropout 层

    我有一个非常基本的查询 我制作了 4 个几乎相同 差异在于输入形状 的 CNN 并在连接到全连接层的前馈网络时合并了它们 几乎相同的 CNN 的代码 model3 Sequential model3 add Convolution2D 32
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 合并 2 个大型 CSS 文件的有效方法

    我正在寻找一个可以合并 2 个大型 CSS 文件的工具 到目前为止我尝试过的所有方法 例如CSSMerge 都没有成功 其中一些只是随机删除属性 其他人则因 webkit 和 moz 等非标准属性而窒息 并给我错误 我还需要保留每条规则大小
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如
  • git Blame:合并后正确的作者

    GIT 合并引入了新的提交 这会导致 git Blame 问题 合并的行似乎是由进行合并的开发人员提交的 我可以理解这种情况冲突的变化 因为他解决了冲突 但是有没有办法让非冲突线路不发生这种情况呢 一些 git Blame 的选择 如果没有
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da

随机推荐

  • 【数据结构】链表

    数据结构 链表 1 链表的概念及结构 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部分 一
  • Qt 安装包制作(基于Qt Installer Framework)

    目录 下载 Qt Installer Framework 程序打包发布 创建安装包程序 下载 Qt Installer Framework 官方下载 http download qt io official releases qt inst
  • 此URL不支持Http方法GET

    出现删除问题的解决办法是 需要把代码中的super注释掉 super doGet req resp super doPost req resp 原来报错的代码 修改之后的代码 记得修改之后 重启一下tomcat就可以了
  • java连接多个mysql_Java连接到多个数据库

    我正在创建一个连接到多个数据库的Java应用程序 用户将能够从下拉框中选择要连接的数据库 然后 程序通过将名称传递给创建初始上下文的方法来连接到数据库 以便它可以与oracle Web逻辑数据源进行通信 public class dbMai
  • 用tensorflow实现基本的word2vec

    Basic word2vec implementation through tensorflow from future import absolute import from future import division from fut
  • 第四步:STM32F4 GPIO介绍

    1 0 STM32F407ZGT6引脚说明 STM32F407ZGT6 一共有7组IO口 每组IO口有16个IO 一共16X7 112个IO 外加2个PH0和PH1 一共114个IO口 GPIOA GPIOB GPIOG PH0 PH1 1
  • mac电脑安装Android studio

    1 安装Android studio 在官网下载安装包https developer android google cn studio 下载时需要根据mac电脑的处理器选择不同版本 在关于本机中查看一下处理器类型就行 然后点击dmg安装包进
  • 鸿蒙应用开发:安装DevEco Studio及环境配置

    一 安装DevEco Studio 1 找到官网下载开发工具 DevEco Studio官网 2 解压下载好的压缩包 3 关闭杀毒软件并以管理员身份运行 4 在如下界面勾选DevEco Studio 直到安装完成 二 下载HarmonyOS
  • 8种日志级别

    优先级从高到低依次为 OFF FATAL ERROR WARN INFO DEBUG TRACE ALL ALL 最低等级的 用于打开所有日志记录 TRACE 很低的日志级别 一般不会使用 DEBUG 指出细粒度信息事件对调试应用程序是非常
  • docker容器的网络信息查看

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 查看容器的IP地址 可以在主机上运行 sudo docker ps 查看正在运行的容器的id等信息 sudo docker inspect 容器id 查看到容器的相关信息
  • win2003 DNS服务器配置方法[图文详解]

    目前很多企业事业单位都建立了单位内部的局域网 网络内部都配备相关的服务器 如web ftp等服务器 内部网络的用户都希望所有的服务器都用域名来访问 网络管理员可以采用在内部搭建DNS服务器的方式来实现 width 680 height 20
  • 蓝牙BLE---DA14585的外部中断使用

    DA14585的标准SDK中并没有找到GPIO外部中断的使用例程 但是外部中断并不难配置 看看GPIO C和GPIO H这两个文件就知道怎么做了 下面三行代码是初始化设置 void gpio init GPIO SetPinFunction
  • 基于SpringBoot的电子招标投标管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 HTML Vue 数据库 MySQL5 7 数据库管理工具 Navicat 12 服务器 Tomcat8 5 开发软件 IDEA Ecl
  • 京东首页实战(带商品栏)

    效果展示 在这里插入图片描述 https img blog csdnimg cn cdb0bf89b2b9415f814 项目结构 需要联系 224 855 7717
  • MySQL进阶面试题完全攻略

    除了基础题部分 本文还收集整理的MySQL面试题还包括如下知识点或题型 MySQL高性能索引 SQL语句 MySQL查询优化 MySQL高扩展高可用 MySQL安全性 问题1 char varchar的区别是什么 varchar是变长而ch
  • 雪过天晴:OTA熬过旅游业寒冬

    旅游业新年开门红的热闹余音犹在 OTA平台走入三年来最具总结意义的一个财报季 继携程 途牛后 同程旅行于3月21日公布了2022年全年财报 数据显示 2022年 同程旅行实现收入65 8亿元 经调整净利润6 5亿元 其中每个季度都保持了盈利
  • 再造STM32---第十九部分:I2C—读写 EEPROM

    本章参考资料 STM32F4xx 参考手册 STM32F4xx 规格书 库帮助文档 stm32f4xx dsp stdperiph lib um chm 及 I2C 总线协议 若对 I2C 通讯协议不了解 可先阅读 I2C 总线协议 文档的
  • stm32学习笔记-esp8266wifi模块连接云平台测试

    文章目录 一 ATK ESP8266模块简介 二 测试AT指令连接新大陆物联网云平台 一 ATK ESP8266模块简介 官方使用手册截图如下 我们知道这个wifi模块有三种模式 其串口通信波特率为115200 数据位为8 停止位为1 测试
  • 史上最全圣杯布局(转自前端神三元)

    圣杯布局如图 而且要做到左右宽度固定 中间宽度自适应 1 利用flex布局
  • 使用SSIS创建同步数据库数据任务

    SSIS SQL Server Integration Services 是用于生成企业级数据集成和数据转换解决方案的平台 使用 Integration Services 可解决复杂的业务问题 具体表现为 复制或下载文件 发送电子邮件以响应