2

我正在寻找一种策略来处理以下 Excel 到 db 问题(SQL Server 2012):

输入将是同一主题的 Excel 文件,但这些 Excel 文件中的列设置可能会逐月更改,这意味着将在这些 Excel 文件中删除或添加列,这不是维护数据库的“最佳”方案-表结构。

请注意,当 Excel 文件更改时,文件名/ID 也会更改。

因此,为了将这些文件(通过SSIS)存储在一个单独的数据库表中,我将使用列名 COL1 到 COLn设置一个“通用”结构。然后,我将向每个 Excel 文件添加一个版本字段,以便创建某种映射表,在其中根据版本定义正确的列名。基本上新的一个月会创建一个新的版本号。这应该可以帮助我创建一个视图来提取具有适当列名的所有版本。

在第一个版本中,我有大约 120 列要处理。

我还有一个“ crosstable -scenario”,因为有些列包含年份值。例如,假设输入文件包含 Savings 2009、Savings 2010、Savings 2011 列。如果在版本 2 中添加了 Savings 2012 列,我将需要在 db 表中创建另一个列,除非删除“Savings 2009”并将 2010 的值添加到“2009 列”。

你看这是一团糟!

使用这种结构,我将始终不得不更改导入工作流程并调整名称映射,但我想不出更好的方法来处理这个问题。

我需要将列拆分到不同的表吗?

我希望我的问题得到解决,并且您可以指导我找到一个干净、“无忧”的解决方案 :-)

正如您可能已经猜到的那样,我对需要处理的输入文件没有太大影响。

谢谢你。

4

1 回答 1

1

我经常面对这个问题。通常,业务用户通常更喜欢处理 Excel 文件。数据库中需要这些信息。以下是我的策略。

首先,我有一个读取 Excel 表的存储过程。此存储过程从一行读取标题并从另一行开始读取数据。它将标题分配为列名,将格式分配为列的数据库类型。

其次,我保留了以前版本的表格。如果列消失或类型更改,我会生成一封电子邮件来通知问题。通常,新版本是正确的版本,我只是接受它作为正确的表。这提供了一个反馈回路。

该解决方案允许用户控制他们的文件。它还保证在表上运行的查询将对新数据起作用,因为列名和数据类型保持不变。

于 2013-04-20T18:02:28.080 回答