2010-01-19 176 views
4

我正在寻找一个解决方案来执行插入,重复键更新如SQL Server 2005中的操作。此操作可能会插入或更新大量的条目。 SQL Server 2008有一个整洁的操作MERGE,它可以完美地完成,问题是我们坚持使用SQL Server 2005.
我已经研究过标准解决方案,但它们都不是很好,因为他们认为只有一个条目被更新/插入。
有谁知道一种方法来复制早期版本的SQL Server MERGE行为?SQL Server 2005批量更新或插入

+0

什么是SQL Server * 2003 *? – Heinzi 2010-01-19 09:52:01

+0

我的不好,我的意思是版本2005 – 2010-01-19 09:56:20

回答

6

Alex Kuznetsov's blog包含使用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) 
+0

我必须开始更多地使用OUTPUT子句! – 2011-02-17 15:10:00

+2

有关性能的注意事项,如果将主键添加到表变量,它会显着加快执行速度。对我来说,它将100k行的插入/更新的执行时间从4分钟减少到〜6秒。 'declare @updated_ids table(id int PRIMARY KEY CLUSTERED)' – Tr1stan 2012-01-31 13:05:36