SQL Server 2008 MERGE с Target as table без значений - PullRequest
0 голосов
/ 27 января 2012

Я хочу выполнить 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
   );

1 Ответ

1 голос
/ 27 января 2012

Если у вас нет строк в целевой таблице, нет ничего для МАТЧ, поэтому вы получаете только вставки.

Запустите запрос во второй раз, чтобы у вас были обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...