将 Excel 中的修改数据导入数据库 Table
Import modified data in Excel to Database Table
我正在处理导入功能,我有一个 excel 文件,其中包含一些数据,稍后将由用户编辑,我设法通过 SmartXLS 进行导入 excel在 C# 中并将所有数据更新到 SQL 服务器数据库,但是,我所做的是获取 excel 文件中的所有数据并将所有行更新到 SQL Table,这影响性能,我还更新了未编辑的行。
我想问一下,有什么方法可以只获取修改后的单元格,Excel中的行并更新到SQL Table中的相应数据?
var workbook = new WorkBook();
workbook.read(filePath);
var dataTable = workbook.ExportDataTable();
只是一个场景,也许它可以帮助您理解 gordatron 和我在谈论什么:
情况如下:
有一个 Table "Products" 是产品信息的中央存储位置
和一个 table "UpdatedProducts" 结构看起来完全像 "Products" table 但数据
也许不同。考虑以下场景:您在早上将产品 table 出口到 excel。整体
您在 excel table 中删除、添加、更新产品的那一天。在一天结束时你想重新导入你的 excel
数据到 "Products" table。你需要什么:
- 删除 "UpdatedProducts"
中的所有记录
- 将数据从 excel 插入到
"UpdatedProducts"(如果可能,批量插入)
- 更新 "Products"
table
那么合并语句可能如下所示:
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
本声明的作用:
匹配时:
table 中都存在数据,如果 ProductName 或 Rate 不同
,我们会更新 "Products" 中的数据
当目标不匹配时:
暂存 table 中存在数据,但您的原始 table 中没有数据,我们将它们添加到 "Products"
当来源不匹配时:
数据存在于您的原始 table 但不存在于暂存 table,您将从 "Products"
中删除
非常感谢 http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/ 这个完美的例子!
我正在处理导入功能,我有一个 excel 文件,其中包含一些数据,稍后将由用户编辑,我设法通过 SmartXLS 进行导入 excel在 C# 中并将所有数据更新到 SQL 服务器数据库,但是,我所做的是获取 excel 文件中的所有数据并将所有行更新到 SQL Table,这影响性能,我还更新了未编辑的行。
我想问一下,有什么方法可以只获取修改后的单元格,Excel中的行并更新到SQL Table中的相应数据?
var workbook = new WorkBook();
workbook.read(filePath);
var dataTable = workbook.ExportDataTable();
只是一个场景,也许它可以帮助您理解 gordatron 和我在谈论什么:
情况如下: 有一个 Table "Products" 是产品信息的中央存储位置 和一个 table "UpdatedProducts" 结构看起来完全像 "Products" table 但数据 也许不同。考虑以下场景:您在早上将产品 table 出口到 excel。整体 您在 excel table 中删除、添加、更新产品的那一天。在一天结束时你想重新导入你的 excel 数据到 "Products" table。你需要什么:
- 删除 "UpdatedProducts" 中的所有记录
- 将数据从 excel 插入到 "UpdatedProducts"(如果可能,批量插入)
- 更新 "Products" table
那么合并语句可能如下所示:
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
本声明的作用: 匹配时: table 中都存在数据,如果 ProductName 或 Rate 不同
,我们会更新 "Products" 中的数据当目标不匹配时: 暂存 table 中存在数据,但您的原始 table 中没有数据,我们将它们添加到 "Products"
当来源不匹配时: 数据存在于您的原始 table 但不存在于暂存 table,您将从 "Products"
中删除非常感谢 http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/ 这个完美的例子!