我正在从csv文件中读取数据并在数据库中添加数据。在将数据插入数据库时,我想用相同的主键更新数据。
例如。)我正在使用两个列条形码(PK)和数量。因此,当我从csv文件插入数据时,类似的条形码数量将被添加。
任何人都可以帮助我吗?我正在使用C#.NET和SQL。
谢谢, Rushabh Shah。
答案 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所提到的那样),你可能会非常喜欢这样做:
这可能会给你最好的结果。 (对于“最佳”的某些值。)
答案 2 :(得分:0)
如果您可以假设表格中已存在所有条形码的现有条目,则可以使用带有两个incominig参数的存储过程(@BarCodeID和@AdditionalQuantity)来执行此操作
UPDATE yourTable SET Quantity = Quantity + @AdditionalQuantity WHERE BarCode = @BarCodeID
答案 3 :(得分:-2)
您可以在表格中添加Trigger。当表中插入某些内容时,您可以让它运行存储过程。