我想从源到目标进行MERGE,如果它们不存在则插入行,并更新那些行。当我这样做时,我只获得插入...没有更新。我读过这篇文章(http://stackoverflow.com/questions/5015623/merge-query-in-sql-server-2008),这对我来说有点令人困惑,但似乎我需要一个重复的来源让这件事成真。有人可以解释为什么需要DUPLICATE源吗?我只是不明白,特别是我应该使用哪些密钥(重复源或常规密钥) - 也许不需要重复的SourceTable?
这里我的(简化)SourceTable:
row userid placervalue placerDt
--- ------- ---------- ----------
1 abc a1 1/1/12
2 xyz b1 1/1/12
3 abc b2 1/20/12
etc.
和我的目标TargetTable相同,但目前没有行。
row userid placerId
--- ------- ----------
(nothing loaded yet)
我想要的是INSERT不在目标中的行和UPDATE行。
row userid placervalue placerDt
--- ------- ---------- ----------
1 abc a1 1/20/12 *** note change here (row 3 updates row 1)
2 xyz b1 1/1/12
当我运行此代码时,我只获得插入(也想知道原因)
MERGE TargetTable as t
USING SourceTable as s
ON s.userid = t.usrid AND s.placervalue = t.placervalue
WHEN MATCHED THEN
UPDATE
SET t.placerDt = s.placerDt
WHEN NOT MATCHED THEN
INSERT (
userid
, placerid
, placerDt
) VALUES (
s.userid
, s.placerid
, s.placerDt
);
答案 0 :(得分:1)
如果您的目标表上没有行,则没有任何匹配,这就是您只能获得插入的原因。
第二次运行查询,您应该有更新