2010-05-26 50 views
2

如何在Microsoft SQL Server 2008中編寫以下內容?upsert with addition

IF EXISTS(SELECT * FROM Table WHERE Something=1000) 
UPDATE Table SET Qty = Qty + 1 WHERE Something=1000 
ELSE 
INSERT INTO Table(Something,Qty) VALUES(1000,1) 

回答

3

在SQL Server中使用新的merge命令2008年會,據我可以收集爲:

merge Table t 
using (select 1000 as Something, 1 as Qty) s on t.Something = s.Something 
when matched then 
    update set t.Qty = t.Qty + 1 
when not matched by target then 
    insert values (s.Something, s.Qty); 

這不是那麼簡單,因爲合併是更高效的合併大集,而不僅僅是一個單一的記錄。否則,您可以嘗試更新記錄,並在沒有更新記錄時插入一條記錄:

update Table set Qty = Qty + 1 where Something = 1000 
if (@@rowcount = 0) begin 
    insert into Table (Something, Qty) values (1000, 1) 
end 
+0

我喜歡你的第二個解決方案。很緊。我甚至開始和結束。 – 2010-05-26 21:00:40

4
IF EXISTS(SELECT * FROM Table WHERE Something=1000) 
BEGIN 
UPDATE Table SET Qty = Qty + 1 WHERE Something=1000 
END 
ELSE 
BEGIN 
INSERT INTO Table(Something,Qty) VALUES(1000,1) 
END