SQL Server 2005,批量更新或插入

4
我正在寻找一种在SQL Server 2005中执行插入、重复键更新的解决方案。这个操作可能会插入或更新大量的条目。SQL Server 2008有一个完美的操作MERGE,可以很好地完成此操作,但问题是我们困在了SQL Server 2005上。
我已经研究了标准解决方案,但它们都不好,因为它们假设只有一个条目被更新/插入。
有没有人知道如何在旧版本的SQL Server中复制MERGE行为的方法?
1个回答

6

Alex Kuznetsov的博客提供了一个建议,使用UPDATE语句的OUTPUT子句。为了简化这篇博客文章中的示例(未经测试):

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)

我必须开始更多地使用OUTPUT子句! - Philip Kelley
2
关于性能的注意事项,如果您向表变量添加主键,则可以显著加快执行速度。对我来说,将100k行的插入/更新的执行时间从4分钟缩短到了约6秒。declare @updated_ids table(id int PRIMARY KEY CLUSTERED) - Tr1stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接