• SSIS: 一步步教你在SSIS 中使用临时表


    需求:

    存在 A 和 B 两个数据库,他们都存在 一个 T1 表,A 数据库的T1 表是源, B数据库的T1表是目的,我们要使 两个表保持同步,即:A.T1存在, B.T1 表不存在则插入。

    解决方案:

    1.在B 数据库中创建一个临时表 TestTmp,存储 A.T1 中的数据

    2.比较 B.TestTmp和 B.T1的数据

       如果一条记录在B.TestTmp存在,B.T1不存在,则将此记录插入到 B.T1表中。

     

    声明: 用 SSIS2015数据库代替 A数据库。 用TSQL2012数据库可以代替 B数据库。

    准备工作:

    1.在SSIS2015数据库中创建T1 表,并插入数据:

    --A database T1 table
    
    if OBJECT_ID('dbo.t1') is not null
    drop table dbo.T1;
    go 
    
    create table dbo.T1
    (
    [Key] int not null,
    col1 nvarchar(10) null
    );
    go
    
    insert into dbo.T1([Key],col1)
    values  (1,'1'),
            (2,'2'),
            (3,'3'),
            (4,'4'),
            (5,'5'),
            (6,'6'),
            (7,'7'),
            (8,'8'),
            (9,'9')

    2.在 TSQL2012 中创建T1表

    if OBJECT_ID('dbo.t1') is not null
    drop table dbo.T1;
    go 
    
    create table dbo.T1
    (
    [Key] int not null,
    col1 nvarchar(10) null
    );
    go
    
    
    insert into dbo.T1([Key],col1)
    values  (1,'1'),
            (2,'2'),
            (3,'3')


    步骤:

    1.使用一个 Execute SQL Task, 重命名为 Create temp table,在sql statement 属性栏中输入下面的代码 去创建对应的临时表。选择需要的connection,在这里,我使用本地的   Server,Database 使用 TSQL2012 作为 B 数据库,即源数据库. 其他属性保持默认设置。详细信息可以参考图 1-1.

    注意,在使用临时表时, 对应的Connection 的属性RetainSameConnection 要设置为true(参考 图片1-2进行设置)

    The sql statement:

    if OBJECT_ID('tempdb..#TestTmp') is not null
    drop table dbo.#TestTmp
    
    CREATE TABLE #TestTmp(
        [key] int not null,
        col1 varchar(10) null
        )
    
     

    Excute sql task 截图:

     

     图 1-1

    图 1-2

    2.拖一个 DataFlow Task,缓存SSIS2015中的数据到 TSQL2012数据库中的临时表。

      2.1获取SSIS2015中的数据。

          在DataFlow Task 中拖一个OLE DB Source 组件。获取SSIS2015.T1表中的数据。

    OLE DB Source 组件的属性设置如下图:

    2.2 将从SSIS2015.T1表中获取到的数据插入到 TSQL2012数据库中的临时表中。

    拉取一个OLEDB Destination 组件,将数据插入到TSQL2012数据库中的临时表中,按照下图配置组件属性。(注意,设置该组件的ValidateExternalMetadate属性为 False.卢静:右击该组件,选择 properties,在 commen properties中找到该属性,并设置其为False.)

    3.用一个Excute sql task,插入 存在于临时表但是不存在在SSIS2015.T1的数据 到SSIS2015.T1中。

    参考下图设置该组件属性

    The sql statement:

    insert into dbo.T1([key],col1)
    select [Key],col1
    from dbo.#testtmp as tmp
    where not exists
    (
    select 1
    from dbo.t1
    where t1.[key]=tmp.[key])

    4.用一个Excete sql task 删除临时表。

    参考下图设置属性:

    The sql statement:

    if OBJECT_ID('tempdb..#TestTmp') is not null
    drop table dbo.#TestTmp

         
    现在设置完成了, 我们运行一下 该 package, 按 F5 或是点击 start 在工具栏, package 将运行成功。

     再查看一下数据,铛铛铛,数据插入成功了!

    如果该解决方案帮助了你,请帮忙顶一下,非常感谢。

    版权声明: 如有引用,请注明引用出处,保留该博客所有版权。

  • 相关阅读:
    对 String 的几个错误认识 X
    用C# 自定义Window7的JumpList(跳转列表) X
    IPv6无状态自动配置功能配合DHCPv6无状态配置功能 实现IPv6自动分配
    H3C S7500E IPV6白皮书
    静默方式执行chkdsk命令
    IPv6基本知识(转载)
    解决win7官方主题themepack无法安装的问题
    英保通等PXE网刻软件的使用
    通过命令提示符修改windows默认打印机
    OFFICE2010出现两个激活信息的处理办法。
  • 原文地址:https://www.cnblogs.com/HlxDo/p/5155392.html
Copyright © 2020-2023  润新知