使用 SSIS 将具有多个表的单个 mdb 文件动态导入 SQL Server?

Posted

技术标签:

【中文标题】使用 SSIS 将具有多个表的单个 mdb 文件动态导入 SQL Server?【英文标题】:Dynamically import Single mdb file with multiple tables into SQL Server using SSIS? 【发布时间】:2019-02-28 14:58:49 【问题描述】:

我有一个 MS Access .mdb 文件,其中包含多个表,例如

表名:

UserLog_1_2019
UserLog_2_2019
User_Log_3_2019

每月自动生成新表。

我想使用 SSIS 将上述动态表导入 SQL Server。如何实现这个场景?

谢谢, 劳伦斯A

【问题讨论】:

能否规范化源 Access DB 中的数据以使用一个日志表,其中包含一个用户 ID 字段? 否,每月创建新表 【参考方案1】:

在这个答案中,我将提供两种方法来实现这一点:

    使用 SSIS 使用 C#

(1) SSIS 方法

您必须将 Access 表列表放入 System.Object 类型的变量中,然后使用 Foreach 循环容器遍历表名称。有许多链接提供了详细信息,例如,您可以参考以下 SO 答案,它可以为您提供一些见解:

How do I programmatically get the list of MS Access tables within an SSIS package?

(2) C#方法

最近我在 Git-Hub 上开始了一个新项目,这是一个使用 C# 开发的类库。您可以使用它使用模式映射方法将表格数据从 excel、word、powerpoint、text、csv、html、json 和 xml 导入到具有不同模式定义的 SQL Server 表中。在以下位置查看:

C# Schema mapping class library

你可以使用类似的代码:

string con = @"Data Source=.\SQLInstance;Initial Catalog=tempdb;integrated security=SSPI;";

using (SchemaMapperDLL.Classes.Converters.MsAccessImport smAccess = new SchemaMapperDLL.Classes.Converters.MsAccessImport(@"U:\Passwords.mdb"))

    using (SchemaMapperDLL.Classes.SchemaMapping.SchemaMapper SM = new SchemaMapperDLL.Classes.SchemaMapping.SchemaMapper("dbo","passwords"))
    
        SM.CreateDestinationTable(con);
        //Read Access
        smAccess.BuildConnectionString();
        smAccess.getSchemaTable();

        foreach (DataRow schRow in smAccess.SchemaTable.Rows)
        
            string strTablename = schRow["TABLE_NAME"].ToString().Trim('\'');

            DataTable dt = smAccess.GetTableByName(strTablename);
            bool result = SM.ChangeTableStructure(ref dt);

            if (result == true)
            
                SM.InsertToSQLUsingSQLBulk(dt, con);
            
        
    

【讨论】:

谢谢..但是我想写像 SELECT * FROM UserLog_* 这样的查询,或者我应该将表名传递给变量.. 这两种方法都可以。但最简单的是将表名传递给变量 正是...我遵循了选项 1 - SSIS 方法并得到了预期的解决方案 有没有办法使用 SQL Query 从 .mdb 文件中加载特定的表? 您可以在OLEDB Source中使用SQL Command访问模式编写一个简单的选择查询

以上是关于使用 SSIS 将具有多个表的单个 mdb 文件动态导入 SQL Server?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS - 检查 OLE DB 源架构

使用 SSIS 将多个 Excel 文件导入表中

SSIS一次将具有起始范围的递增ID插入多个表中

重命名链接表 MDB 文件对中的字段?

SSIS中对多个工作表的条件拆分转换

如何使用 SSIS 将多个 Access 数据库导入 SQL Server