Я хочу выполнить MERGE из источника в цель, где я вставляю строки, если они не существуют, и обновляю те, которые существуют. Когда я делаю это, я получаю только вставки ... без обновлений. Я читаю этот пост (/4785303/zapros-na-sliyanie-v-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)
я хочу вставить строки, которых нет в целевом объекте, и строки 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
);