使用相同的主键更新数据

时间:2011-03-10 22:29:41

标签: c# sql

我正在从csv文件中读取数据并在数据库中添加数据。在将数据插入数据库时​​,我想用相同的主键更新数据。

例如。)我正在使用两个列条形码(PK)和数量。因此,当我从csv文件插入数据时,类似的条形码数量将被添加。

任何人都可以帮助我吗?我正在使用C#.NET和SQL。

谢谢, Rushabh Shah。

4 个答案:

答案 0 :(得分:2)

查看merge关键字。它应该做你想要的几乎所有。

这是一个应该为你做的存储过程。

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

答案 1 :(得分:1)

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所提到的那样),你可能会非常喜欢这样做:

  1. BULK将CSV文件中的数据插入到空的临时表中。
  2. 使用现有表格合并临时表。
  3. TRUNCATE临时表。
  4. 这可能会给你最好的结果。 (对于“最佳”的某些值。)

答案 2 :(得分:0)

如果您可以假设表格中已存在所有条形码的现有条目,则可以使用带有两个incominig参数的存储过程(@BarCodeID和@AdditionalQuantity)来执行此操作

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

答案 3 :(得分:-2)

您可以在表格中添加Trigger。当表中插入某些内容时,您可以让它运行存储过程。