在 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 相同)。
我尝试了什么:
- 使用代码列进行合并联接转换,但我不知道如何重新插入 table,因为由于 Table1 有关系,我不能简单地删除 table 并替换它用新的
- 使用查找转换,但由于两个 table 不是同一类型,因此不允许我创建查找 table 的连接管理器(在我的情况下是这样的) MySQL)
我对 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 将被删除。
我希望能够使用来自另一个 table 的数据更新 table 的特定列。这是两个 table 的样子,用于获取 table 数据的数据库类型和 SSIS 组件(顺便说一句,ID 和代码都是唯一的)。
表 1(ID、代码、说明)[T-SQL 使用 ADO NET 源组件访问的数据库]
表 2(...,代码,说明,...)[MySQL 使用 ODBC 源组件访问的数据库]
我想使用 Table2.Description 更新列 Table1.Description,首先将它们与正确的代码匹配(因为 Table1.Code 与 Table2.Code 相同)。
我尝试了什么:
- 使用代码列进行合并联接转换,但我不知道如何重新插入 table,因为由于 Table1 有关系,我不能简单地删除 table 并替换它用新的
- 使用查找转换,但由于两个 table 不是同一类型,因此不允许我创建查找 table 的连接管理器(在我的情况下是这样的) MySQL)
我对 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 将被删除。