如何使用SSIS导入Excel数据到SQL Server并实现宽表转长表
SSIS实现Excel宽表转长表导入SQL Server操作步骤
1. 配置Excel数据源
- 新建SSIS包,添加数据流任务,在数据流中插入「Excel源」组件
- 配置Excel连接管理器指向目标Excel文件,选择对应工作表,确认读取到的字段包含
Product及所有年周列(202147、202148等)
2. 逆透视转换(宽表转长表核心步骤)
- 在Excel源下游添加「逆透视转换」组件,关联Excel源的输出
- 打开逆透视转换编辑器:
- 勾选
Product字段,设置为「传递列」,保留原值不参与转换 - 勾选所有年周列,统一设置「输出列别名」为
Value - 将「透视键列名」设置为
YearWeek,确认后组件会自动将原年周列名输出为YearWeek字段值,对应单元格数值输出为Value字段值,同时绑定对应Product
- 勾选
3. 配置SQL Server目标
- 在逆透视转换下游添加「OLE DB目标」组件,配置OLE DB连接管理器指向目标SQL Server实例
- 选择目标表
MyData,进入字段映射页面,确认三个字段匹配关系:- 源
Product→ 目标Product - 源
YearWeek→ 目标YearWeek - 源
Value→ 目标Value
- 源
- 若字段类型不匹配,可在逆透视转换和OLE DB目标之间添加「数据转换」组件调整字段类型
4. 运行验证
执行SSIS包后,可执行以下SQL校验导入结果:
-- 校验总数据量是否等于 产品数量 * 年周列数量 SELECT COUNT(*) FROM MyData; -- 抽查特定产品特定周的数值是否匹配 SELECT * FROM MyData WHERE Product = 'XXX' AND YearWeek = '202147';
若运行包时报Excel驱动相关错误,可在项目属性的调试页面将「Run64BitRuntime」设置为False,使用32位Excel驱动运行。
若后续Excel年周列会持续新增,可将转换逻辑改为动态实现:通过脚本组件读取Excel元数据获取所有年周列名,动态生成转换逻辑,无需每次新增列都修改SSIS包配置。
内容的提问来源于stack exchange,提问作者user17074321
相关产品推荐
相关产品推荐

