2010-08-18 76 views
0

我有兩列的表:無循環插入或更新?

ItemMaster (Item INT, Quantity INT) 

如果項目已經存在,那麼我應該更新的數量。否則,我必須在此表中插入一條記錄。

這可能沒有循環?

我使用的是SQL Server 2005中

+0

正確的2個不同的查詢的一種可能性。 – hgulyan 2010-08-18 08:11:29

回答

4

它可以在沒有一個循環來完成是:

UPDATE table1 
SET Quantity = Quantity + 1 
WHERE Item = @itemID 

IF @@ROWCOUNT = 0 
    INSERT INTO table1 (Item, Quantity) 
    VALUES (@itemID, 1) 
+0

你是對的,但對於你的回答,我必須使用所有項目的循環,並逐一處理項目,而不是可能。 – KuldipMCA 2010-08-18 10:06:58

+0

我的答案不涉及任何循環。如果這裏有另一個需求,你可能需要編輯你的問題。 – Codesleuth 2010-08-18 10:16:54

+0

是的,但因爲你必須使用IN子句,就像那裏的ITEMID IN(從ITEMMASTER中選擇ItemID) – KuldipMCA 2010-08-18 10:34:07

1

一行

IF EXISTS (SELECT * from ItemMaster WHERE Item = @Item) 
    UPDATE ItemMaster 
     SET Quantity = @Quantity 
    WHERE Item = @Item 
ELSE 
    INSERT INTO ItemMaster VALUES(@Item, @Quantity) 

對於許多行:

INSERT INTO ItemMaster (Item, Quantity) 
SELECT Item, Quantity 
FROM AnotherTable a 
WHERE NOT EXISTS (Select 1 from ItemMaster i Where i.Item = a.Item); 

UPDATE ItemMaster i 
    SET Quantity = a.Quantity 
FROM AnotherTable a 
WHERE a.Item = i.Item