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