如何在SQL Server中进行增量加载

问题描述 投票:0回答:2

我的数据库表没有标识列。我们将客户端数据从 DB2 提取到 SQL Server,不幸的是 DB2 设计没有标识列。

现在我们从源(DB2/SQL Server)插入、更新和删除了一些数据,我想使用一些增量加载概念将这些数据加载到目标(SQL Server)。

我在数据流任务中尝试了 SSIS 查找,但是仅插入一条新记录需要花费大量时间。请注意,在“查找转换编辑器”中,我将所有“可用输入列”映射到可用的“可用查找列”,因为没有标识列。我想,这就是为什么需要时间。我有几张表有大约 2000 万条记录。

有没有更快的方法可以做到这一点,特别是当表没有标识列时? except 或 SQL merge 会有帮助吗?

我愿意采用除 SSIS 之外的任何其他方法。

sql-server sql-server-2008 ssis
2个回答
0
投票

例如,如果您的源是来自 DB2 的 SQL 查询,请尝试向其中添加新列。它将是您选择“期望更改或想要监视更改”的列的校验和值。

SELECT 
BINARY_CHECKSUM(
    Column1
    ,Column2
    ,Column3)AS ChecksumValue
,Column1
,Column2
,Column3
FROM #TEMP

您还必须将其添加到 SQL 中的现有表中才能开始比较。 如果你有这个,那么你可以在校验和值评估器上进行查找,而不是在列上进行查找。由于数字查找比多列上的 varchar 比较快得多。我猜测,由于没有密钥,因此您必须在校验和匹配(应该不会更改现有记录)和不匹配之间拆分数据。不匹配可能是新行或只是更新。但你的设备应该更小一些才能使用。

祝你好运。 HTH


-1
投票

查找SSIS需要一些时间,因此您可以使用ESQL Task并调用合并过程。 我认为您可以做的是使用合并过程,您可以在源表中创建一个列并更新列中的记录,如

merge desination
using 
 {
 source columns from source s}
 join desination d
 on s.primarykey=d.primary key
when matched then
 s.updatedrecord=1
 when not matched then
 insert into desination columns.

从上面的查询中,您将插入新记录,并且在updatedrecord列的帮助下更新的记录您可以成功更新或将它们插入到目标表中。

您可以前往以下链接进行合并程序。

https://www.sqlservercentral.com/Forums/Topic1042053-392-1.aspx https://msdn.microsoft.com/en-us/library/bb510625.aspx

© www.soinside.com 2019 - 2024. All rights reserved.