1.It inserts all the records That Exist in Table A into Table B
使用查找转换。源将是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
查看这篇文章
检查记录是否存在,如果存在则更新,否则插入
使用合并:
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
您可以在中执行 Merge SQLControl Flow
更新 :The Lookup transformation tries to perform an equi-join between values in the transformation input and values in the reference dataset.
您可能只需要一个 Data Flow Task 。
图表
当目标表数据在源表中没有匹配值时,查找会将目标行重定向到 oledb 目标,该目标将数据插入源表(Lookup No Match Output
)
当目标表的行与源表的业务键匹配时,匹配的行将被发送到Oledb Command
并使用更新 SQL,查找中的所有目标行将在源表中更新。
这只是一个概述。上述设计存在一个问题,因为当行匹配时,无论列中的任何更改如何,源表都会被更新。所以请参考上面的文章或尝试在 ssis 中搜索 SCD 组件
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);