在 SSIS 中使用另一个 table 更新 table(具有关系)

Update a table (that has relationships) using another table in SSIS

我希望能够使用来自另一个 table 的数据更新 table 的特定列。这是两个 table 的样子,用于获取 table 数据的数据库类型和 SSIS 组件(顺便说一句,ID 和代码都是唯一的)。

表 1(ID、代码、说明)[T-SQL 使用 ADO NET 源组件访问的数据库]

表 2(...,代码,说明,...)[MySQL 使用 ODBC 源组件访问的数据库]

我想使用 Table2.Description 更新列 Table1.Description,首先将它们与正确的代码匹配(因为 Table1.Code 与 Table2.Code 相同)。

我尝试了什么:

我对 SSIS 还是个新手,但如有任何想法或帮助,我将不胜感激

我的解决方案基于@Akina 的评论。虽然使用链接服务器绝对适合,但我的要求是制作一个 SSIS 包来处理迁移一些旧数据。

第一个和最后一个是 SQL 任务,而 Migrate ICDDx 是将数据传输到在第一个 SQL 任务期间创建的分段 table 的 DFT。

这是在 Create Staging Table 期间执行的 SQL 命令:

DROP TABLE IF EXISTS [tempdb].[##stagedICDDx];
CREATE TABLE ##stagedICDDx (
       ID INT NOT NULL,
       Code VARCHAR(15) NOT NULL,
       Description NVARCHAR(500) NOT NULL,
       ........
);

这里是 sql 命令(基于@Akina 的评论),用于从分阶段转移到最终(在 Transfer Staged 内):

UPDATE [MyDB].[dbo].[ICDDx]
   SET [ICDDx].[Description] = [##stagedICDDx].[Description]
   FROM [dbo].[##stagedICDDx]
   WHERE [ICDDx].[Code]=[##stagedICDDx].[Code]
GO

这是使用的 DFT(TSQL 和 MySQL 来源 return 使用 ORDER BY Code 排序输出,所以我不必插入 Sort 组件在 Merge Join) 之前:

注意:顺便说一句,您必须将连接管理器设置为 retain/reuse 相同的连接,这样临时 table 在我们向其传输数据之前不会被删除。如果一切顺利,那么在 Transfer Staged SQL 任务之后,连接将被关闭,全局临时 table 将被删除。