2010-08-18 3 views
0

У меня есть таблица с двумя столбцами:Вставить или обновить без цикла?

ItemMaster (Item INT, Quantity INT) 

Если элемент уже есть, то я должен обновлять количество. В противном случае мне нужно вставить запись в эту таблицу.

Возможно ли это без петли?

Я использую SQL Server 2005.

+0

одна возможность для права 2 разных запроса. – hgulyan

ответ

4

Это может быть сделано без петли да:

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

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

Вы правы, но для вашего ответа я должен использовать цикл всего элемента и обрабатывать по одному предмету, чем это возможно. – KuldipMCA

+0

Мой ответ не содержит никаких циклов. Возможно, вам придется отредактировать свой вопрос, если здесь где-то есть другое требование. – Codesleuth

+0

да, но для этого вам нужно использовать предложение IN так, чтобы WHERE ITEMID IN (Select ItemID from ITEMMASTER) – KuldipMCA

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 
Смежные вопросы