0

我正在使用导入功能,我有一个包含一些数据的 excel 文件,稍后将由用户编辑,我设法在 C# 中通过 SmartXLS 导入 excel 并将所有数据更新到 SQL Server 数据库,但是,我所做的是获取 excel 文件中的所有数据并将所有行更新到 SQL 表中,这会影响性能,并且我还更新了未编辑的行。

我想问一下,有什么方法可以只获取修改过的单元格、Excel 中的行并更新到 SQL 表中的相应数据?

var workbook = new WorkBook();
workbook.read(filePath);
var dataTable = workbook.ExportDataTable();
4

1 回答 1

1

只是一个场景,也许它可以帮助你理解 gordatron 和我在说什么:

以下情况:有一个表“产品”是产品信息的中央存储位置,还有一个表“UpdatedProducts”,其结构看起来与“产品”表完全相同,但数据可能不同。考虑以下场景:您在早上将产品表导出到 excel。您在 Excel 表中删除、添加、更新产品的一整天。在一天结束时,您想将您的 Excel 数据重新导入“产品”表。你需要什么:

  • 从“UpdatedProducts”中删除所有记录
  • 将数据从 excel 插入“UpdatedProducts”(如果可能,批量插入)
  • 更新“产品”表

那么合并语句可能如下所示:

MERGE Products AS TARGET
USING UpdatedProducts AS SOURCE 
    ON TARGET.ProductID = SOURCE.ProductID
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate 
    THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
                    TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (ProductID, ProductName, Rate) 
        VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE

此语句的作用: 匹配时:两个表中都存在数据,如果 ProductName 或 Rate 不同,我们会更新“Products”中的数据

当目标不匹配时:数据存在于暂存表中但不在您的原始表中,我们将它们添加到“产品”

当源不匹配时:原始表中存在数据但暂存表中不存在,您将从“产品”中删除

非常感谢http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/这个完美的例子!

于 2015-05-28T14:12:35.557 回答