如何在SSIS中更新表?

如何在SSIS中更新表?,ssis,Ssis,我在数据库1中有一个包含x和y列的表。我在数据库2中有另一个表,其中有x列和y列。我想将数据库1中的所有y列更新为数据库2中的y列,其中数据库1中的x列与数据库2中的x列匹配 这似乎是一项难以置信的琐碎任务,但我不知道如何在SSIS中完成它。我的数据流任务中有一个OLE DB源和目标,映射了2列,但它一直试图插入而不是更新,它失败了,因为目标中有一大堆其他不可为空的列,我没有映射。使用SSI进行数据转换的问题是,源数据集和目标数据集都需要拉入ETL服务器上的内存,转换需要在那里进行,然后结果必须

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


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

使用SSI进行数据转换的问题是,源数据集和目标数据集都需要拉入ETL服务器上的内存,转换需要在那里进行,然后结果必须写回目标服务器

它是网络密集型的。它是内存密集型的。只是不太理想。这也是为什么你很难弄清楚的原因。在服务器上,它只是一个
UPDATE
语句,但将其放入SSIS需要更多的步骤,而且没有第三方工具,除了逐行更新之外,没有现成的方法可以执行任何操作

在源数据相对较轻的情况下,我建议最有效的方法是使用SSI将源数据从源服务器移动到目标服务器,并将其放入工作/保留/中间表中。SSIS在将数据从点A移动到点B方面非常出色。然后,在
数据流
之后,使用
执行SQL
任务调用
更新
存储过程,或者继续在包中编写
更新
语句


这样做可以将DML从ETL服务器加载到SQL服务器,而SQL服务器正是为这种工作而设计的。有点像“让每个人都做他们擅长的事情”的方法,如果你愿意的话。

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

最好的方法是在DB1中创建一个新表,将表中的所有数据存储在DB2中。让我们将此表称为“暂存”。使用SSI从DB2中的表直接插入到DB1中的新“staging”表,然后在DB1数据库中创建一个更新存储过程,根据“staging”表中现有的条目更新端点表中的现有条目。您可以在填充暂存表后,从SSI触发SP运行。如果DB1中有一个同义词引用DB2中的表,那么可以在这里删除“staging”表


SSIS更多的是数据的批量移动,而不是更新已经存在的数据。对中间的任何内容使用存储过程。

每个表中有多少行?在要更新的表中,有数百万行。在源表中,只有几个。