3

我有一个场景,我需要在 SSIS 中同步两个表

Table A位于 DATABASE A 和TABLE BDATABASE 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 都包含键 = 123,表 A 中的几列都已更新。

我正在考虑使用合并连接,但这仅有助于插入新记录。我如何设法实现 UPDATE 的东西

4

1 回答 1

2
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);
于 2012-12-17T09:56:11.557 回答