SSIS更新特定列

时间:2013-06-14 16:24:04

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

我在SQL Server中有一个包含许多字段的表。其中两个是IDNumber和Resolved(Date)Resolved在SQL Server中为Null。然后我有IDNumber和Resolved(Date)的数据,我想导入和更新表。我希望它找到匹配的IDNumber并输入更新的解决日期。我怎么能这样做?

谢谢!

1 个答案:

答案 0 :(得分:8)

进行更新时,SSIS会一次更新一行,这可能会非常昂贵。我建议使用执行SQL任务来创建临时表:

IF (OBJECT_ID(N'dbo.tmpIDNumberStaging') IS NOT NULL 
    DROP TABLE dbo.tmpIDNumberStaging;

CREATE TABLE dbo.tmpIDNumberStaging
(       IDNumber    INT NOT NULL,
        Resoved     DATE NOT NULL
);

然后使用数据流任务将数据导入此表(不确定您的源是什么,但您的目标是OLE DB Destination。您可能需要在数据流任务上设置“延迟验证” false和/或“验证外部元数据”在目标上为false,因为目标是在运行时创建的)。

最后使用此临时表更新主表(并删除临时表以进行清理)

UPDATE  YourMainTable
SET     Resolved = st.Resolved
FROM    YourMainTable t
        INNER JOIN dbo.tmpIDNumberStaging st
            ON st.IDNumber = t.IDNumber
WHERE   t.Resolved IS NULL;

-- CLEAN UP AND DROP STAGING TABLE
IF (OBJECT_ID(N'dbo.tmpIDNumberStaging') IS NOT NULL 
    DROP TABLE dbo.tmpIDNumberStaging;