将多个访问表导入一个SQL Server表

时间:2017-09-28 14:34:16

标签: sql sql-server ms-access

我最近交了一个非常旧的访问数据库转换为SQL服务器。这是由其他人在90年代完成的,但我有.mdb文件

数据库已经很老了,但是客户的实际配方数据很容易保留。它的结构如下所示。

表格

公式

Formula_000

Formula_001

Formula_002

如上所示,有一个标题公式表,其中包含名称,日期,版本等详细信息。

表格[公式]

------------------------------------------------

| FORMULA NAME | ID | VERSION | CREATED |

| Formula_000 |  000   |     1     |  01/01/1997

| Formula_001 |  001   |     1     |  01/01/1997

------------------------------------------------

有一个单独的附表,其中包含公式表中每个条目的成分,因此有一个名为[Formula_001]的表,其中包含以下列。

表[Formula_000] (x 100)

material code | % | 

material 1234 | 025 |    

material 5678 | 075 |  

------------------------------------------------

我不希望所有这些表都通过标头表链接,但我需要将数据转换为新结构。这些表中有数百个名为Formula_xxx

我想要做的是遍历上面数据库中的所有MS访问表,除了头表[formula](我可以删除这个以使其更容易),并将它们复制到一个新的主表中,带有公式编号的额外列,用于标识它来自哪个表。以下示例..

表格[Formula_Ingredients]

material code | % | formulaID | 

material 1234 | 025 |    000

material 5678 | 075 |    000

material 1111 | 025 |    001

material 2222 | 075 |    001

------------------------------------------------

任何想法的家伙?

1 个答案:

答案 0 :(得分:1)

这让人回想起我们最近为将11,000个Access数据库导入Postgres而执行的任务。您在一个Access文件中有多个表,而不是多个Access文件中的相同表名,但是同样的方法也适用。

我们使用了通用的SQL脚本处理器(免责声明:我写的)。它是一个Python程序;您可以从https://pypi.org/project/execsql/或运行pip install execsql获取。该技术是将所有公式表的名称放入目标数据库中的表中,然后使用execsql的COPY元命令迭代,以将数据从Access数据库复制到SQL Server。文档(http://execsql.readthedocs.io/en/latest/examples.html#example-13-import-all-the-csv-files-in-a-directory)的示例13中对此进行了说明,但您希望将其修改为复制而不是导入。