Динамически импортировать один файл MDB с несколькими таблицами в SQL Server, используя SSIS? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть один файл MS Access .mdb, который содержит несколько таблиц, таких как

Имя таблицы:

UserLog_1_2019
UserLog_2_2019
User_Log_3_2019

Для каждого месяца новая таблица генерируется автоматически.

Я хочу импортировать вышеупомянутые динамические таблицы в SQL Server с помощью служб SSIS.Как добиться этого сценария?

Спасибо, Лоуренс А

1 Ответ

0 голосов
/ 28 февраля 2019

В этом ответе я предоставлю 2 подхода для достижения этой цели:

  1. с использованием SSIS
  2. с использованием C #

(1) подход SSIS

Вы должны получить список таблиц Access в переменную типа System.Object, а затем перебрать имена таблиц, используя контейнер цикла по каждому элементу.Есть много ссылок, которые дают подробную информацию, например, вы можете сослаться на следующий ответ SO, который он может дать вам некоторые идеи:

(2) Подход C #

Недавно я начал новый проект на Git-Hub, который является библиотекой классов, разработанной с использованием C #.Вы можете использовать его для импорта табличных данных из excel, word, powerpoint, text, csv, html, json и xml в таблицу сервера SQL, имеющую другое определение схемы с использованием подхода сопоставления схем.проверить это по адресу:

Вы можете использовать подобный код:

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