我们如何使用ssis而不通过查找来插入新数据或将数据从一个表更新到另一表(从MySQL到SQL Server)。
答案 0 :(得分:0)
执行此操作的一种常见方法是将新数据插入到空的临时表中,然后运行SQL Merge命令(使用单独的SQL查询任务)。
MERGE命令非常强大,可以进行更新,插入甚至删除。在此处查看Merge的完整说明: https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017
答案 1 :(得分:0)
此设计如下所示:
您将有4个表和1个视图:源,TMP_Dest(完全是没有PK的源),CHG_Dest(用于更改,完全是没有PK的目标),Dest(将有PK),FV_TMP_Dest(这是万一的目的地看起来与来源不同-字段类型不同
SSIS包:
1。使用ExecuteSQLTask并截断TMP_Dest,因为它对于提取的数据只是临时的
使用ExecuteSQlTask并截断CHG_Dest,因为它对于提取的数据来说只是临时的
使用一个DataFlowTask将数据从源加载到TMP_Dest
定义两个变量OperationIDInsert = 1和OperationIDUpdate = 2(这些值并不重要,您可以根据需要设置它们)->您将在下面的5点使用它们。
使用另一个将具有的DataFlowTask:
在OLE DB Source的左侧,您将在其中从视图中提取数据,按PK排序(不要忘记从Advanced Editor中为PK字段设置SortKeyPosition)
在OLE DB Source右侧,您将在其中从PK排序的目标中提取数据(不要忘记从Advanced Editor中为PK字段设置SortKeyPosition)
在此之间左移
在左侧(“插入侧”)将具有:派生列,您将在其中派生OperationIDInsert变量和OLE DB目标作为Expression,以便将数据插入CHG_Dest表中。这样,您将必须在目标表中插入的数据插入,并且您知道这一点,因为您具有OperationIDInsert列。
在右侧,您将执行相同的操作,但使用OperationIDUpdate列
您将在ControlFlow中使用ExecuteSQLTask,并将具有SQL合并。根据PK字段和OperationIDInsert / OperationIDUpdate字段,您将插入数据或对其进行更新。
希望这会对您有所帮助。让我知道您是否需要其他信息。