我正在尋找一個解決方案來執行插入,重複鍵更新如SQL Server 2005中的操作。此操作可能會插入或更新大量的條目。 SQL Server 2008有一個整潔的操作MERGE,它可以完美地完成,問題是我們堅持使用SQL Server 2005.
我已經研究過標準解決方案,但它們都不是很好,因爲他們認爲只有一個條目被更新/插入。
有誰知道一種方法來複制早期版本的SQL Server MERGE行爲?SQL Server 2005批量更新或插入
4
A
回答
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
什麼是SQL Server * 2003 *? – Heinzi 2010-01-19 09:52:01
我的不好,我的意思是版本2005 – 2010-01-19 09:56:20