如何在SSIS中同步两个表

时间:2012-12-17 09:42:15

标签: sql database ssis

我有一个场景,我需要在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的事情

1 个答案:

答案 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.

您可以只需要一个数据流任务。

enter image description here

当目标表数据在源表中没有匹配值时,查找会将目标行重定向到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);