• Effectively step 3 is redundant why delete the rows in the source, and then reinsert them, you're doubling the work load. Its should just be a case of

    1) Import data

    2) Update Changed Data

    3) Insert New Data.

    I agree with Eirikur, It sounds like a good candidate for MERGE.

    I would also suggest that the key on both the destination table is clustered it should make the process significantly faster. so something like.

    MERGE

    (

    Select *

    , HASHBYTES('MD5',col1+'|'+col2+'|'+CONVERT(VARCHAR(100),col3)+.....) CheckSum

    FROM table_a

    ) Dest

    USING

    (

    Select *

    , HASHBYTES('MD5',col1+'|'+col2+'|'+CONVERT(VARCHAR(100),col3)+.....) CheckSum

    FROM table_b

    ) Source

    ON Source.Key=Dest.Key A

    WHEN MATCHED AND Source.CheckSum<>Dest.CheckSum THEN

    UPDATE SET

    Dest.col1=Source.col1

    ,Dest.col2=Source.col

    ,Dest.col3=Source.col2

    --:::::::::::::::::

    ,Dest.CheckSum=Source.CheckSum

    WHEN NOT MATCHED BY TARGET THEN

    INSERT (Key, col1,col2,col3,.........,Checksum)

    VALUES (Source.Key,Source.col1,Source.col3,.......,Source.CheckSum);

    ----

    @pietlinden, there will be no benefits of partitioning and then using Switch, as you cannot guarantee that the data being altered will all be in the same partition frame, and 10 million rows really doesn't justify the additional overhead of partitioning.

    _________________________________________________________________________
    SSC Guide to Posting and Best Practices