C#中的Excel表到SQL表-将Excel中的多列映射到SQL中的单列

本文关键字:SQL Excel 单列 映射 中的 表到 | 更新日期: 2023-09-27 18:00:43

我正在尝试将excel中的单个ListObject表上传到数据库中的SQL表。

我已经编写了简单地生成SQL查询字符串并执行的代码——这很有效,但不容易维护。

所以我发现了这个技巧:https://stackoverflow.com/a/11268550/1610402

这允许我填充一个数据表并将其大容量插入SQL;具有列映射功能(如果需要)。

然而,我在Excel中的表结构不同于简单的列"名称",以避免冗余数据。

因此,我需要从Excel映射列(示例):

Column1    Column2   '2015'  '2016'  '2017'  '2018'  '2019'  '2020'
1          1          0.1     0.2     0.3     0.35    0.375   0.4
1          2          0.1     0.2     0.3     0.35    0.375   0.4

到SQL中的列,如下所示:

Column1    Column2    Year    Value
1          1          2015    0.1
1          1          2016    0.2
1          1          2017    0.3
1          1          2018    0.35
1          1          2019    0.375
1          1          2020    0.4
1          2          2015    0.1
1          2          2016    0.2
1          2          2017    0.3
1          2          2018    0.35
1          2          2019    0.375
1          2          2020    0.4

在C#.Net中有更好的方法吗?还是应该坚持使用嵌套的for循环和字符串生成器?

C#中的Excel表到SQL表-将Excel中的多列映射到SQL中的单列

所需内容的概念称为"取消抓取"。无论你在C#中这样做还是不重要,因为你可以简单地在SQL Server中加载第一个数据,然后通过取消对这些数据的浏览

SELECT IDENTITY(int,1,1) as RowId, Column1, Column2, [Year], [Value]
INTO newTable
FROM (
   SELECT Column1,Column2,[2015],[2016],[2017],[2018],[2019],[2020] FROM oldTable
) as source
UNPIVOT
(
   [Value] for [Year] in [2015],[2016],[2017],[2018],[2019],[2020]
) as target

需要使用方括号使这些字符串显示为列名,而不是数字或保留字。