首页 > 解决方案 > 使用 SSIS 将具有多个表的单个 mdb 文件动态导入 SQL Server?

问题描述

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

表名:

UserLog_1_2019
UserLog_2_2019
User_Log_3_2019

每个月都会自动生成新表。

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

谢谢,劳伦斯A

标签: sqlsql-serverms-accessssisetl

解决方案


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

  1. 使用 SSIS
  2. 使用 C#

(1) SSIS方法

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

(2) C#方法

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

您可以使用类似的代码:

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);
            }
        }
    }
}

推荐阅读