sql - 处理不断变化的 Excel 表结构以导入数据库表

标签 sql excel tsql generics sql-server-2012

我正在寻找一种策略来处理以下 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/

相关文章:

sql - 复制 MySQL 数据库的最简单方法?

php - 准备好的 SQL 语句 INSERT

mysql - 在 mysql 中存储和检索用户收藏夹

vba - excel:比较日期的vba类型不匹配

c# - 什么支持Excel更好? (VB.net 或 C#.net ??)

excel - 获取 VLOOKUP 以从选择中选择最近的日期

使用另一个表过滤一个表的 SQL 查询

sql - 多表左连接问题

sql - 如何在 SQL 中保持滚动校验和?

sql - 在两个表之间查找修改/新建/删除的记录