如何在 SSIS 中更新 table?

How do I update a table in SSIS?

我在数据库 1 中有一个 table,其中包含列 x 和 y。我在数据库 2 中有另一个 table,其中包含列 x 和 y。我想将数据库 1 中的所有 y 列更新为数据库 2 中的 y 列,其中数据库 1 中的 x 列与数据库 2 中的 x 列匹配。

这似乎是一项微不足道的任务,但我不知道如何在 SSIS 中完成它。我的数据流任务中有一个 OLE DB 源和目标,并且映射了 2 列,但它一直尝试插入而不是更新,但它失败了,因为我在目标中有一堆其他不可空的列没有映射。

使用SSIS做数据转换的问题是,源数据集和目标数据集都需要拉到ETL服务器的内存中,转换需要在那里进行,然后要写入结果返回到目标服务器。

它是网络密集型的。这是内存密集型的。这不太理想。这也是为什么您无法弄清楚的原因。在服务器上,它只是一个 UPDATE 语句,但将它导入 SSIS 需要的步骤远不止这些,而且没有第三方工具,除了逐行更新之外,没有开箱即用的方法可以做任何事情.

在您的情况下,您的源数据相对较轻,我建议最有效的方法是使用 SSIS 将源数据从源服务器移动到目标服务器并将其放入 working/holding/intermediate table。 SSIS 绝对擅长将数据从 A 点移动到 B 点。然后,在 Data Flow 之后,使用 Execute SQL 任务调用 UPDATE 存储过程,或者继续编写UPDATE 包中的语句。

这样做可以将 DML 从 ETL 服务器卸载到 SQL 服务器,该服务器专为此类工作而设计。如果您愿意,可以说是一种 "let everybody do what they're good at" 方法。

好的,与其尝试将数据从 DB2 直接映射到 DB1,不如将数据从 DB2 暂存到 DB1,然后更新 DB1 中感兴趣的 table。

最好的方法是在 DB1 中创建一个新的 table 来存储 DB2 中 table 中的所有数据。我们称之为 table 'staging'。使用 SSIS 从 DB2 中的 table 到 DB1 中的新 'staging' table 进行平面插入,然后在 DB1 数据库中创建更新存储过程以更新端点中的现有条目 table 基于您现在在 'staging' table 中的条目。填充暂存 table 后,您可以触发从 SSIS 到 运行 的 SP。如果您有来自 DB1 的同义词引用 DB2 中的 table,则可以在此处删除 'staging' table。

SSIS 更多的是关于数据的批量移动,而不是更新已经存在的数据。对介于两者之间的任何事情使用存储过程。