0

在将数据插入表后在我的包中。我已经使用 SQL TASK 通过更新查询填充了校验和值,这需要更多时间。如何在没有第三方组件的情况下解决这个问题。

请帮助我。

以下查询用于填充校验和 ID。在此表中,基于 Import_Id 的记录超过 1000 万条。

UPDATE Communication SET ChecksumId = CHECKSUM(address1,address2,state,zip,city,....) where import_id=?

这个过程只需要更多的时间,最少 1 或 2 小时。

4

2 回答 2

1

使用 T-SQL CHECKSUM 函数:http: //msdn.microsoft.com/en-us/library/ms189788.aspx

您可以在整行上使用它,就像:

select FirstName, LastName, CheckSum(*) As CheckSum
  from SomeUserTable
于 2012-11-30T13:43:26.800 回答
1

一种可能性是编写自己的校验和函数,并使用加载数据的数据流中的脚本转换将其应用于传入数据的每一行。从执行时间的角度来看,这可能是最快的;但是,如果值必须与 T-SQL CHECKSUM 匹配,则需要进行大量逆向工程。

或者,不要直接加载目标表,而是创建一个与目标表具有相同布局的工作表,以及一个定义为所需列的 CHECKSUM 的计算列:

CREATE TABLE WRK_Communication
(
    address1 VARCHAR(50),
    address2 VARCHAR(50),
    -- other columns
    ChecksumId CHECKSUM(address1,address2,state,zip,city,....)    
) 

在您的 SSIS 包中,首先使用执行 SQL 任务来截断此工作表,然后使用数据流加载它,然后使用另一个执行 SQL 任务将工作表的内容插入到目标表中。

于 2012-12-02T00:15:04.620 回答