TSQL - 将SourceTable中的值插入或更新到TargetTable(无需删除)

时间:2011-06-29 14:34:33

标签: tsql merge synchronization

我想通过相应的插入或更新将所有数据从SourceTable推送到TargetTable。我不需要从TargetTable中删除任何条目,即使它们在SourceTable中不存在。

这是我到目前为止所拥有的。 MERGE命令是最合适的方法吗?我已经看了一些例子,但不太确定如何解决这个问题。

我当前的解决方案会截断整个表格,然后插入数据。我已经意识到我需要保留以前在TargetTable中存在的值的PK值。如何将此更改为INsert或更新,具体取决于TargetTable的PublicRefId列中是否存在AssociatedRefId?

-- Truncate lancrm01sql's Baseline Official table
        TRUNCATE TABLE [TargetTable]

        -- Populate table
        INSERT INTO [TargetTable] 
        (PublicRefId 
        ,FamilyName 
        ,GivenName
        )
        SELECT 
            AssociatedRefId 
        ,   lastname 
        ,   firstname 

        FROM 
            #TempSourceTable

1 个答案:

答案 0 :(得分:2)

MERGE TargetTable AS T
USING #TempSourceTable AS S
ON (t.PublicRefId =  s.AssociatedRefId)
WHEN NOT MATCHED BY TARGET
    THEN INSERT(PublicRefId, FamilyName, GivenName) VALUES (S.AssociatedRefId, S.lastname, S.firstname)
WHEN MATCHED 
    THEN UPDATE SET T.FamilyName = S.lastname, T.GivenName = S.firstName

This article gives a pretty good explanation on using MERGE.