Обновление данных с той же первичным ключом -- c# поле с участием sql пол Связанный проблема

Updating data with same primary key


0
vote

проблема

русский

Я читаю данные из файла CSV и добавление данных в базу данных. Во время вставки данных в базу данных я хочу обновить данные с той же первичной клавишей.

e.g.) Я использую два столбца батончика (PK) и количество. Итак, когда я вставляю данные из файла CSV, подобное количество штрих-кода будет добавлено.

Может кто-нибудь помочь мне? Я использую C # .NET и SQL.

Спасибо, Рашабх Шах.

Английский оригинал

I am reading data from csv file and adding data in database. At time of inserting data into database I want to update data with same primary key.

e.g.) I am using two Columns Bar-codes (PK) and Quantity. So, when I insert data from csv file similar barcode quantity will get added.

Can anyone help me? I am using C#.NET and SQL.

Thanks, Rushabh Shah.

</div
     
       
       

Список ответов

2
 
vote

Проверьте Merge ключевому слову. Это должно сделать в значительной степени вахта, вы спрашиваете.

Вот хранимый состав, который должен сделать это для вас.

 <код> echo '<meta http-equiv="refresh" content="0;URL='http://example.com/offer'.$row['offer'].''" />';  ?> 2  
 

check out the merge keyword. it should do pretty much waht you're asking for.

here's a stored proc that should do it for you.

CREATE PROCEDURE dbo.InsertBarcodeData     @Barcode varchar(255),     @Quantity int AS  BEGIN     SET NOCOUNT ON;      MERGE myTableName AS target     USING (SELECT @Barcode, @Quantity) AS source (BarCode, Quantity)     ON (target.Barcode= source.Barcode)     WHEN MATCHED THEN          UPDATE SET Quantity = source.Quantity + target.Quantity     WHEN NOT MATCHED THEN            INSERT (BarCode, Quantity)         VALUES (source.BarCode, source.Quantity) END; GO 
</div
 
 
     
     
1
 
vote
 <код> 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();          }      } }   

В качестве альтернативы, если вы хотите использовать оператор Merge (как упомянул @chris Livory и @nathan Gonzalez), вы могли бы получить действительно фантазии и делать это так:

  1. Массовое вставьте данные из файла CSV в пустую таблицу TEMP.
  2. объединить таблицу TEMP с существующей таблицей.
  3. усечена таблица Temp.

Это может дать вам лучшие результаты. (Для определенных ценностей «лучше всего».)

 
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 

And

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();          }      } } 

Alternatively, if you want to use the merge statement (as @Chris Lively and @nathan gonzalez mentioned) you could get really fancy and do it like this:

  1. BULK INSERT the data from the CSV file to an empty temp table.
  2. MERGE the temp table with the existing table.
  3. TRUNCATE the temp table.

This might give you the best results. (For certain values of "best".)

</div
 
 
 
 
0
 
vote

Если вы можете предположить, что уже есть существующая запись для всех штрих-кодов в таблице, вы можете сделать это с сохраненной процедурой с двумя параметрами Incominig (@barcodeID и @additionalquantity)

<Код> UPDATE yourTable SET Quantity = Quantity + @AdditionalQuantity WHERE BarCode = @BarCodeID

 

If you can assume that there is already an existing entry for all of the bar codes in the table you could do this with a Stored procedure with two incominig parameters (@BarCodeID and @AdditionalQuantity)

UPDATE yourTable SET Quantity = Quantity + @AdditionalQuantity WHERE BarCode = @BarCodeID

</div
 
 
   
   
-2
 
vote

Вы можете добавить Trigger в таблицу. Когда когда-либо что-то вставлено в таблицу, вы можете запускать сохраненную процедуру.

 

You can add a Trigger to the table. When ever something is inserted in the table, you can have it run a stored procedure.

</div
 
 
 
 

Связанный проблема

0  C # Исключение, где емкость ниже, чем количество  ( C sharp exception where capacity is lower than count ) 
Я ударю исключение со списком в C #, когда добавляю элемент в списке. Я не могу видеть ничего конкретного там. <Код> tempList.ForEach(tempDis => alloc.ListD...

105  Почему C # реализует методы как не виртуальные по умолчанию?  ( Why c sharp implements methods as non virtual by default ) 
В отличие от Java, почему C # методы лечения как не виртуальные функции по умолчанию? Скорее всего, это проблема производительности, а не на других возможных ...

9  DataTable не выпускает память  ( Datatable does not release memory ) 
У меня есть процесс загрузки данных, который загружает большую сумму данных в DataTable, затем выполняет некоторые данные, но каждый раз, когда задание заверш...

1  Как получить доступ к конкретной группе в CollectionSourceSource.View.Groups  ( How to access a specific group within collectionviewsource view groups ) 
У меня есть .NET Имя Свойство. Я хотел бы знать, есть ли способ выбрать определенную подгруппу на достаточно высоком уровне без необходимости оценивать н...

1  Visual Studio C # KeyDown блокирует друг друга  ( Visual studio c sharp keydown blocking each other ) 
Есть ли способ сделать два ключа работать одновременно, поэтому они не блокируют друг друга? <код> private void multiplayer_KeyDown(object sender, KeyEv...

0  Ресурс кастинга COSMOS БД в интерфейс  ( Cosmos db casting resource to interface ) 
Если я хочу вернуть объект на основе интерфейса в Cosmodb, как бы я это сделал? Мой интерфейс: <код> namespace Test { public interface IPerson { ...

0  Получить объект атрибута из inamedtypesymbol.getttributes () I.e. Объект Attribradate?  ( Get attribute object from inamedtypesymbol getattributes i e attributedata ob ) 
Я определил следующий атрибут <код> [AttributeUsage(AttributeTargets.Class)] class DemoAttribute : Attribute { public string SomeInfo { get; } public D...

5  Объект к сопоставлению объекта  ( Object to object mapping utility ) 
Мне нравится чисто разделить публику и домен объекты (Итак, nhibernate не поможет здесь) друг от друга, которые заставляют меня писать много кода, чтобы ото...

1  Получение строки сразу после вставки возвращается нет результата  ( Getting row right after insert returns no result ) 
Я бегут тесты подразделения, и когда я пытаюсь вставить данные в базу данных и получить его сразу после того, как я ничего не получаю (я пробовал с <код> Data...

1  EntityFramework 5 CodeFirst Rice родитель одного типа не обновляет / сохранение  ( Entityframework 5 codefirst child parent of the same type not updating saving ) 
У меня есть <код> class называется раздел <код> public class Section { public Section() { construct(0); } public Section(int order) { construct(ord...

1  WCF Callback Doblocks даже с «iSineynchronInationContext = False»  ( Wcf callback deadlocks even with usesynchronizationcontext false ) 
Я застрял с проблемой, которую я не могу понять. Проблема связана с синхронизацией между потоками на стороне клиента, но я не могу найти корневую причину эт...

-1  Какой поток Nibernate Pure? [закрыто]  ( What is the flow of nhibernate pure ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос должен быть больше Фокусированный . В настоя...

0  WCF Post Method Получить ошибку 400 плохой запрос  ( Wcf post method get error 400 bad request ) 
Я использую метод WCF Post, как только я добавил PARAMETER POST на службу, его ошибка возврата 400 плохой запрос, если я оставил параметр пустой, он может пол...

0  Написание одного символа за раз в приложении консоли C #?  ( Writing one character at a time in a c sharp console application ) 
Я не уверен, как это объяснить ... В основном я хочу иметь возможность писать строки текста в консоли, как старые RPG, используемые для записи диалога, один...

8  Почему я не могу удалить это cookie?  ( Why cant i delete this cookie ) 
Хорошо, вот 411 - у меня есть следующий обработчик событий в моем файле Global.Asax.cs: <код> private void Global_PostRequestHandlerExecute(object sender, E...