我有一个场景,我需要在 SSIS 中同步两个表
表 A
在数据库 A 中,表 B
在数据库 B 中。两个表具有相同的架构。我需要一个 SSIS 包,以这种方式将表 A 与表 B 同步
1。它将表 A 中存在的所有记录插入到表 B 中
和
2. Update TABLE B if Same "Key" exsit in Both but Updated records in Table A
例如,表 A 和 B 都包含键 = 123,表 A 中的几列都已更新。
我正在考虑使用 Merge Joins,但这仅有助于插入新记录。我如何设法实现更新的东西
最佳答案
1.It inserts all the records That Exist in Table A into Table B
使用 lookup transformation .Source 将是 Table A
,Lookup 将是 Table B
。映射两个表中的公共(public)列并选择您需要插入的列。查找后使用 OLEDB 目的地
并映射来自查找的列并将其插入到 Table B
2.Update TABLE B if Same "Key" exsit in Both but Updated records in Table A
与上面的逻辑相同。使用查找而不是 OLEDB 目标
,使用 OLEDB 命令
,然后编写更新 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);
您可以在 Control Flow
中的 Execute SQL Task
中执行 Merge SQL
更新:查找转换尝试在转换输入中的值与引用数据集中的值之间执行等值连接。
您可以只需要一个数据流任务。
图表
当目标表数据在源表中没有匹配值时,查找会将目标行重定向到将数据插入源表的 oledb 目标(查找无匹配输出
)
当目标表行与源表的业务键匹配时,匹配的行将被发送到 Oledb 命令
并使用更新 SQL,查找中的所有目标行将被在源表中更新。
这只是一个概述。上面的设计存在问题,因为当行匹配时,无论列中的任何更改都会更新源表。所以请引用上面的文章或尝试在中搜索 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);
关于sql - 如何在SSIS中同步两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911637/