我正在寻找一种策略来处理以下 Excel 到 db 问题(SQL Server 2012):
输入将是同一主题的 Excel 文件,但这些 Excel 文件中的列设置可能会逐月更改,这意味着将在这些 Excel 文件中删除或添加列,这不是维护数据库的“最佳”方案-表结构。
请注意,当 Excel 文件更改时,文件名/ID 也会更改。
因此,要将这些文件(通过 SSIS )存储在 中一个数据库表我将使用列名 COL1 到 COLn 设置“ 通用 ”结构。然后我会添加一个 版本 字段到每个 Excel 文件,以便我可以创建某种 映射表我根据版本定义正确的列名。基本上新的一个月会创建一个新的版本号。这应该可以帮助我创建一个 View 来提取具有适当列名的所有版本。
在第一个版本中,我有大约 120 列要处理。
我还有一个“ 交叉表 -scenario”,因为有些列包含年份值。
例如,假设输入文件包含 Savings 2009、Savings 2010、Savings 2011 列。如果在版本 2 中添加了 Savings 2012 列,我将需要在 db 表中创建另一个列,除非删除“Savings 2009”并将 2010 的值添加到“2009 列”。
你看这是一团糟!
使用这种结构,我将始终不得不更改导入工作流程并调整名称映射,但我想不出更好的方法来处理这个问题。
我需要将列拆分到不同的表吗?
我希望我的问题得到解决,并且您可以指导我找到一个干净、“无忧”的解决方案 :-)
正如您可能已经猜到的那样,我对需要处理的输入文件没有太大影响。
谢谢你。
最佳答案
我经常面对这个问题。通常,业务用户通常更喜欢处理 Excel 文件。数据库中需要这些信息。以下是我的策略。
首先,我有一个读取 Excel 表的存储过程。此存储过程从一行读取标题并从另一行开始读取数据。它将标题分配为列名,并将格式分配为列的数据库类型。
其次,我保留了以前版本的表格。如果列消失或类型更改,我会生成一封电子邮件来通知问题。通常,新版本是正确的版本,我只是接受它作为正确的表。这提供了一个反馈回路。
该解决方案允许用户控制他们的文件。它还保证在表上运行的查询将对新数据起作用,因为列名和数据类型保持不变。
关于sql - 处理不断变化的 Excel 表结构以导入数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121948/