C# 使用相同的主键更新数据
我正在从csv文件中读取数据,并将数据添加到数据库中。在将数据插入数据库时,我想用相同的主键更新数据 e、 我使用两列条形码(PK)和数量。所以,当我从csv文件中插入数据时,类似的条形码数量将被添加 有人能帮我吗?我正在使用C#NET和SQL 谢谢, Rushabh Shah.查看关键词。它应该能满足你的要求 这里有一个存储进程,它应该可以为您完成这项工作C# 使用相同的主键更新数据,c#,sql,C#,Sql,我正在从csv文件中读取数据,并将数据添加到数据库中。在将数据插入数据库时,我想用相同的主键更新数据 e、 我使用两列条形码(PK)和数量。所以,当我从csv文件中插入数据时,类似的条形码数量将被添加 有人能帮我吗?我正在使用C#NET和SQL 谢谢, Rushabh Shah.查看关键词。它应该能满足你的要求 这里有一个存储进程,它应该可以为您完成这项工作 CREATE PROCEDURE dbo.InsertBarcodeData @Barcode varchar(255),
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提到的),您可以非常喜欢并这样做:
这可能会给你最好的结果。(对于某些“最佳”值)您使用什么来访问数据库?实体框架、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();
}
}
}