Вставить или обновить без цикла? - PullRequest
0 голосов
/ 18 августа 2010

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

ItemMaster (Item INT, Quantity INT)

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

Возможно ли это без цикла?

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

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

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

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

IF @@ROWCOUNT = 0
    INSERT INTO table1 (Item, Quantity)
    VALUES (@itemID, 1)
2 голосов
/ 18 августа 2010

ДЛЯ одной строки

 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 
...