create procedure InsertOrUpdateSales
(
@bar_code nvarchar(100),
@quantity int
)
as
if exists (select * from sales where bar_code = @bar_code)
update sales set quantity = quantity + @quantity where bar_code = @bar_code
else
insert into sales ( bar_code, quantity) values ( @bar_code, @quantity )
go
И
public static void InsertOrUpdateSales(string connection, string barCode, int quantity)
{
using(SqlConnection conn = new SqlConnection(connection))
{
using(SqlCommand comm = new SqlCommand("InsertOrUpdateSales", conn))
{
comm.CommandType = CommandType.StoredProcedure;
comm.Paramters.AddWithValue("@bar_code", barCode);
comm.Paramters.AddWithValue("@quantity", quantity);
comm.ExecuteNonQuery();
}
}
}
В качестве альтернативы, если вы хотите использовать оператор слияния (как упомянуто @Chris Lively и @nathan gonzalez), вы можете по-настоящему придумать и сделать это так:
- BULK INSERT данные из CSV-файла в пустую временную таблицу.
- MERGE временная таблица с существующей таблицей.
- TRUNCATE временная таблица.
Это может дать вам лучшие результаты. (Для определенных значений «best».)