我想通过相应的插入或更新将所有数据从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
答案 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.