【发布时间】:2012-01-27 15:57:16
【问题描述】:
我想从源合并到目标,如果它们不存在,我会在其中插入行并更新存在的行。当我这样做时,我只得到插入......没有更新。我读了这篇文章(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)
我想要的是插入不在目标中的行,并更新在目标中的行。
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
);
【问题讨论】:
标签: sql sql-server-2008 merge