如何在SQL Server

时间:2017-03-04 15:42:09

标签: sql-server sql-server-2008 ssis

我有DB表,其中没有标识列。我们将客户端数据从DB2提取到SQL Server,遗憾的是DB2设计没有标识列。

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

我在Dataflow任务中尝试了SSIS查找,但是它花了很多时间来简单地插入一条新记录。请注意,在"查找转换编辑器"我映射了所有"可用的输入列"可用的#34;可用的查阅列"因为没有标识栏。我想,这就是为什么需要时间。我有几张表有大约2000万条记录。

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

除了SSIS之外,我还有其他方法。

2 个答案:

答案 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