SQL Server 2005, массовое ОБНОВЛЕНИЕ или ВСТАВКА - PullRequest
4 голосов
/ 19 января 2010

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

1 Ответ

6 голосов
/ 19 января 2010

Блог Алексея Кузнецова содержит предложение с использованием предложения 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...