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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 将运行成功。

技术分享

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

技术分享

 

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

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

以上是关于SSIS: 一步步教你在SSIS 中使用临时表的主要内容,如果未能解决你的问题,请参考以下文章

在 SSIS 包中使用临时表

SSIS 包不想获取临时表的元数据

SSIS 临时临时表

如何在 SSIS 控制流任务中创建一个临时表,然后在数据流任务中使用它?

在SSIS中的不同组件间使用局部临时表

SSIS - 将Excel与数据库进行比较