我有DB表,其中没有标识列。我们将客户端数据从DB2提取到SQL Server,遗憾的是DB2设计没有标识列。
现在我们从源代码(DB2 / SQL Server)插入,更新和删除了一些数据,并且我想使用一些增量加载概念将这些数据加载到目标(SQL Server)。
我在Dataflow任务中尝试了SSIS查找,但是它花了很多时间来简单地插入一条新记录。请注意,在"查找转换编辑器"我映射了所有"可用的输入列"可用的#34;可用的查阅列"因为没有标识栏。我想,这就是为什么需要时间。我有几张表有大约2000万条记录。
有没有更快的方法/方法可以做到这一点,特别是当表没有标识列时?是除了或SQL合并会有帮助吗?
除了SSIS之外,我还有其他方法。
答案 0 :(得分:0)
查找SSIS需要一些时间,因此您可以使用ESQL任务并调用合并程序。 我认为你可以做的是使用合并程序,你可以在源表中创建一个列并更新列中的记录,如
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.
从上面的查询中,您将插入新记录,并在updaterecord列的帮助下更新记录,您可以更新或在目标表中成功插入它们。
您可以转到以下链接进行合并程序。
https://www.sqlservercentral.com/Forums/Topic1042053-392-1.aspx https://msdn.microsoft.com/en-us/library/bb510625.aspx
答案 1 :(得分:0)
如果您的源是来自DB2的SQL查询,请尝试向此添加新列。它将是您选择的“期望更改或想要监视更改的列”的校验和值。
SELECT
BINARY_CHECKSUM(
Column1
,Column2
,Column3)AS ChecksumValue
,Column1
,Column2
,Column3
FROM #TEMP
您必须将它添加到SQL中的现有表中,以便能够开始比较。 如果你有这个,那么你可以在校验和值上查找而不是在列上查找。由于数字查找比多列上的varchar比较快得多。我猜测因为没有密钥,所以你必须在校验和匹配(不应该改变现有记录)和非匹配之间拆分数据。非匹配可能是新行或只是更新。但是你的设置应该更小才能使用。
祝你好运。 HTH