2010-01-19 111 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