【发布时间】:2019-08-16 10:46:42
【问题描述】:
我们如何插入新数据或将数据从一个表更新到另一个表,从 MySQL 到 SQL Server,使用 ssis 而不是使用查找。
【问题讨论】:
标签: mysql sql-server ssis ssms upsert
我们如何插入新数据或将数据从一个表更新到另一个表,从 MySQL 到 SQL Server,使用 ssis 而不是使用查找。
【问题讨论】:
标签: mysql sql-server ssis ssms upsert
执行此操作的常用方法是将新数据插入空临时表,然后运行 SQL Merge 命令(使用单独的 SQL 查询任务)。
MERGE 命令非常强大,可以进行更新、插入甚至删除。在此处查看合并的完整描述: https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017
【讨论】:
此设计如下所示:
您将有 4 个表和 1 个视图:源、TMP_Dest(完全作为没有 PK 的源)、CHG_Dest(用于更改,完全作为没有 PK 的目标)、Dest(将有 PK)、FV_TMP_Dest(这是以防万一目标看起来与源不同 - 不同的字段类型)
SSIS 包:
1.使用 ExecuteSQLTask 并截断 TMP_Dest,因为它对于提取的数据只是临时的
使用 ExecuteSQlTask 并截断 CHG_Dest,因为它对于提取的数据只是临时的
使用一个 DataFlowTask 将数据从 Source 加载到 TMP_Dest
定义两个变量OperationIDInsert=1和OperationIDUpdate=2(值不重要,你可以随意设置)->你会在下面5点使用它们
使用您将拥有的另一个 DataFlowTask:
在左侧的 OLE DB 源中,您将从视图中提取数据,按 PK 排序(不要忘记从高级编辑器中为 PK 字段设置 SortKeyPosition)
在右侧的 OLE DB 源中,您将从按 PK 排序的 Dest 中提取数据(不要忘记从高级编辑器中为 PK 字段设置 SortKeyPosition)
这之间的左连接
在左侧(“插入侧”),您将拥有:一个派生列,您将在其中将 OperationIDInsert 变量分配为表达式,以及一个用于在 CHG_Dest 表中插入数据的 OLE DB 目标。这样,您将插入必须插入到目标表中的数据,并且您知道这一点,因为您有 OperationIDInsert 列。
在右侧,您将执行相同的操作,但使用 OperationIDUpdate 列
您将在 ControlFlow 中使用 ExecuteSQLTask 并进行 SQL 合并。根据 PK 字段和 OperationIDInsert/OperationIDUpdate 字段,您将插入或更新数据。
希望这会对您有所帮助。如果您需要更多信息,请告诉我。
【讨论】: