需求:
存在 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 将运行成功。
再查看一下数据,铛铛铛,数据插入成功了!
如果该解决方案帮助了你,请帮忙顶一下,非常感谢。
版权声明: 如有引用,请注明引用出处,保留该博客所有版权。