Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用相同的主键更新数据_C#_Sql - Fatal编程技术网

C# 使用相同的主键更新数据

C# 使用相同的主键更新数据,c#,sql,C#,Sql,我正在从csv文件中读取数据,并将数据添加到数据库中。在将数据插入数据库时,我想用相同的主键更新数据 e、 我使用两列条形码(PK)和数量。所以,当我从csv文件中插入数据时,类似的条形码数量将被添加 有人能帮我吗?我正在使用C#NET和SQL 谢谢, Rushabh Shah.查看关键词。它应该能满足你的要求 这里有一个存储进程,它应该可以为您完成这项工作 CREATE PROCEDURE dbo.InsertBarcodeData @Barcode varchar(255),

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

e、 我使用两列条形码(PK)和数量。所以,当我从csv文件中插入数据时,类似的条形码数量将被添加

有人能帮我吗?我正在使用C#NET和SQL

谢谢, Rushabh Shah.

查看关键词。它应该能满足你的要求

这里有一个存储进程,它应该可以为您完成这项工作

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

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

更新您的表格集合数量=数量+@额外数量,其中条形码=@BarCodeID

您可以向表格中添加一个。在表中插入内容时,可以让它运行存储过程

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

或者,如果您想使用merge语句(正如@Chris Lively和@nathan gonzalez提到的),您可以非常喜欢并这样做:

  • 将CSV文件中的数据大容量插入到空临时表中
  • 将临时表与现有表合并
  • 截断临时表

  • 这可能会给你最好的结果。(对于某些“最佳”值)

    您使用什么来访问数据库?实体框架、nHibernate、调用存储过程的数据集/读卡器、Linq到Sql等?这适用于任何Sql类型还是您需要特定的数据库?我使用的是Microsoft Sql Server 2008 R2。我正在设计windows应用程序,并使用数据网格视图来显示数据。您的意思是“数量将被添加”必须添加到现有数量中(例如,数据库中已有2个,新数量=4,导致数据库将为6),还是必须将数据库中的值更改为4?我认为问题在于他无法保证,因此,如果有必要,您希望进行更新,如果没有,则希望进行插入。@Nathan在这种情况下,我承认合并解决方案更好。仅当您使用的是不支持Merge语句的较旧版本的SQL Server时,才使用此方法。什么?对荒谬的回答投否决票我是新加入合并的。使用merge命令是否也可以更新SET Q=source.Q+Q?@Pleun-是,它可以使用现有值进行更新。MERGE语句非常灵活。几乎……太灵活了:-杰弗里说了什么。update部分的工作方式几乎与常规update语句完全相同。
    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();
             }
         }
    }