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 将运行成功。

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

需求:

存在 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 将运行成功。

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

猜你喜欢

转载自www.cnblogs.com/dream1699/p/9651665.html