我有一个场景,我需要在SSIS中同步两个表
Table A
位于数据库A中,TABLE B
位于数据库B中。两个表都具有相同的模式。我需要一个SSIS包,以这种方式同步表A和表B.
1. It inserts all the records That Exist in Table A into Table B
和
2. Update TABLE B if Same "Key" exsit in Both but Updated records in Table A
例如表A和B都包含Key = 123,表A中的几列都已更新。
我正在考虑使用Merge Joins,但这只会插入新记录。我如何能够设法实现UPDATE的事情
答案 0 :(得分:2)
1.It inserts all the records That Exist in Table A into Table B
使用lookup transformation .Source将为Table A
,查找将为Table B
。映射表中的常用列并选择插入所需的列。查找后使用OLEDB destination
并映射来自查找的列并将其插入Table B
2.Update TABLE B if Same "Key" exsit in Both but Updated records in Table A
与上面相同的逻辑。使用查找而不是OLEDB Destination
使用OLEDB Command
然后编写更新sql。
Update TableB
Set col1=?,col2=?....
在列映射中映射来自lookup
查看这篇文章 Checking to see if a record exists and if so update else insert
使用合并:
MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED AND b.Col1<>a.Col1 THEN
UPDATE
SET b.Col1 = a.Col1
WHEN NOT MATCHED BY TARGET THEN
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);
您可以在Execute SQL Task
Control Flow
中执行合并SQL
更新:The Lookup transformation tries to perform an equi-join between values in the transformation input and values in the reference dataset.
您可以只需要一个数据流任务。
图
当目标表数据在源表中没有匹配值时,查找会将目标行重定向到oledb目标,该目标将数据插入源表(Lookup No Match Output
)
当目标表行与具有源表的业务键匹配时,匹配的行将被发送到Oledb Command
并使用更新SQL,查找中的所有目标行将在源中更新表。
这只是一个概述。上述设计存在一个问题,就是当行匹配时,无论列的任何变化如何都会更新源表。请参考上面的文章或尝试搜索SCD组件。 SSIS
Update 2:
MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED THEN
UPDATE
SET b.Col1 = a.Col1
WHEN NOT MATCHED BY TARGET AND a.IsReady=1 THEN --isReady bit data type
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);