我有一个 excel 工作表,它有大约 200 行和大约 200 多列。我需要取消透视此 excel 表并将其插入到 sql server 表中。我正在使用第三方 excel api,它将 excel 工作表转换为 ADO .Net 数据表。
原始数据表 A
对于 Unpivot 操作,我正在遍历原始数据表行和列,并将值分配给另一个数据表,该数据表已根据
数据表 B 未透视
填充新的 DataTable 后,我将在数据表上使用 SQlBulkCopy() 并将所有记录保存到 SQLServer 表中。
我用于 Un-Pivot 操作的代码
//excelExport is the DataTable which stores the entire excel workSheet
DataTable newDatatable = new DataTable(); //For Un-Pivoting
newDatatable .Columns.Add(new DataColumn("EconomyID"));
newDatatable .Columns.Add(new DataColumn("SystemLanguage"));
newDatatable .Columns.Add(new DataColumn("VariableName"));
newDatatable .Columns.Add(new DataColumn("VariableValue"));
foreach (DataRow dr in excelExport.Rows) //excelExport is the original datatable
{
int colCount = 0;
foreach (DataColumn dc in excelExport.Columns)
{
if (colCount >= 2)
{
DataRow dr2 = newDatatable.NewRow();
dr2["Economy"] = dr[1].ToString();
dr2["SystemLanguageID"] = dr[2].ToString();
dr2["VariableName"] = dc.ColumnName;
dr2["VariableValue"] = dr[dc].ToString();
newDatatable.Rows.Add(dr2);
}
colCount++;
}
}
现在的问题是因为我的原始数据表 A 有 200 多列(和 200 行)。遍历每一行并将值分配给另一个 newDatatable 需要 10 秒。所以整个操作需要 200 行 * 10 秒......基本上永远(取决于 excel/datatable 中的列);只是为了创建 newDatatable。有没有更有效的方法来处理这个 Un-pivot 操作。我知道我们已经为 excel 到 sqlserver 导入操作构建了 SSIS 包,但我们的要求是客户端应该能够将 excel 上传到系统中,并且该过程必须是实时的。有什么建议么?