sql-server - 使用 SSIS 将具有不同列数的文件加载到同一个表中
问题描述
我需要将 14 个具有不同列数的不同文件加载到同一个表中。许多列是相同的,但每个文件都有一些特定于它们的列。每个文件的名称表示该文件将具有的列。例如,文件“Temporary_Employees.txt”将始终具有以下列:
合同_ID | 个人ID | 聘用日期 | 合同工期小时数 | 经理_ID
文件“PartTime_Employees.txt”将包含以下列:
合同_ID | 个人ID | 聘用日期 | 每周小时数 | 经理_ID
目标表包含所有列。
我是 SSIS 的新手,我能想到的唯一解决方案是拥有 14 个数据流和 14 个平面文件连接......有没有更好的方法来做到这一点?
解决方案
您需要为每个独特的文件格式创建一个平面文件连接管理器。
如果存在共享格式 FullTime_Employees.txt 和 Management_Employees.txt,那么您可以使用 Foreach 文件枚举器循环文件(更改连接管理器的连接字符串属性)并让数据流使用更新的连接管理器。
设计一个数据流来完成一项任务——这个加载兼职员工,这个加载临时员工,这个加载全职员工。可能感觉需要更多的工作,但尝试任何聪明的东西都可能是调试的噩梦。
噩梦般的接近
如果您不需要在目标中填充“额外”列,则可以使用我在上述旧答案中概述的查询方法。基本上,您将编写一个查询来枚举文件中通用的所有列名。这将导致一组一致的元数据可用,然后您可以使用 foreach 文件枚举器来处理所有文件。
我将此归类为噩梦般的方法,因为虽然它有效,但如果这是您第一次涉足 SSIS,则此解决方案包含许多先进技术。
推荐阅读
- sql - 在基于行的字段/值表上处理复杂的查询
- java - 如何保护您的 API 免受了解您 API 的开发人员的攻击?
- angular - 从 Angular 的 RXJS/NGRX 存储中获取不可变项以在组件中编辑的最佳实践
- android - 在 x 轴上滑动时锁定水平 RecyclerView 中的 Y 轴滚动
- javascript - 如何在赛普拉斯(vscode)中进行自定义命令实现
- angular - 解析 mailto.api 期间的 HTTP 失败
- php - Elementor Widget 无法找到我的班级,返回致命错误
- java - 为什么 swing gui 的行为很奇怪?
- amazon-web-services - Glue 无法读取 S3 存储桶
- angular - 具有推断条件类型的 Angular 组件模型