SQL Server 2005, массовое обновление или вставка


Я ищу решение для выполнения операции Insert, on duplicate key Update like в SQL Server 2005. Эта операция может вставить или обновить большое количество записей. SQL Server 2008 имеет аккуратную операцию слияния, которая сделает это идеально, проблема в том, что мы застряли с SQL Server 2005.
Я просмотрел стандартные решения, но все они не очень хороши, потому что они предполагают, что обновляется/вставляется только одна запись.
Кто-нибудь знает способ репликации поведения слияния в более старых системах версии SQL Server?

1 4

1 ответ:

Блог Алексея Кузнецова содержит предложение, использующее предложение OUTPUT из высказывания UPDATE. Перефразируя пример из этой записи блога (непроверенной):

DECLARE @updated_ids table(id int)

UPDATE table
   SET ...
OUTPUT inserted.id INTO @updated_ids
  FROM table INNER JOIN data-to-insert ON table.id = data-to-insert.id 

INSERT INTO table
SELECT ...
  FROM data-to-insert
 WHERE id NOT IN (SELECT id FROM @updated_ids)