Как выбрать динамические файлы из определенной папки, а затем экспортировать на сервер SQL с помощью служб SSIS - PullRequest
0 голосов
/ 01 декабря 2018

Я пытался создать задачу SSIS, которая выбирает файл MS Access из определенной папки, а затем экспортирует в SQL Server (если этот файл / таблица найден на сервере, тогда пропустите экспорт).

IЯ новичок в SSIS, я использовал задачу сценария для динамического выбора имен файлов, а затем пытался переместиться, но в итоге я получил неудовлетворенные результаты.Даже я гуглил и получил немного идей, но все еще не смог понять, как я хотел.Любая подробная помощь будет очень полезна.

Примечание: Здесь я не всегда уверен в имени файла из этой папки (то есть динамического)

1 Ответ

0 голосов
/ 03 декабря 2018

Существует множество вариантов динамического выбора файлов.Поскольку вы не уверены в имени файла, я предполагаю, что это параметр или переменная.Ниже приведен пример проверки папки из переменной на предмет заданного имени файла и загрузки ее в переменную SSIS object.Затем эти файлы загружаются в таблицу SQL Server с помощью Foreach Loop.Вы упомянули файлы, а не один файл, поэтому в этом примере предполагается, что передается только часть имени файла, как в случае, если дата / UID были добавлены в начало или конец имени файла.

  • Добавить задачу сценария, в которой параметры / переменные содержат имя файла и папки как ReadOnlyVariables и переменную объекта, которая будет хранить имена файлов во время выполнения как ReadWriteVariable.Код для этого в конце этого поста.Метод string.IndexOf используется для проверки файлов, содержащих заданный текст, а параметр StringComparison.CurrentCultureIgnoreCase используется для того, чтобы сделать этот поиск нечувствительным к регистру.В этом примере используется переменная для пути к файлу и параметр для имени файла (обозначается $Package в имени параметра).
  • Добавление Foreach Loop типа Foreach From Variable Enumerator Enumerator.Добавьте переменную объекта, которая была заполнена в задаче сценария, в качестве переменной на странице коллекции.На панели «Сопоставление переменных» добавьте строковую переменную с индексом 0. Это должна быть пустая строковая переменная, которая будет содержать имя каждого файла.
  • Создать диспетчер соединений с плоскими файлами из примера файла данных.Убедитесь, что имена столбцов и типы данных настроены соответствующим образом.Чтобы задать имя файла динамически, выберите выражение ConnectionString (щелкните многоточие свойства Expression в окне «Свойства» диспетчера соединений) и добавьте эту же строковую переменную из панели сопоставлений Foreach Loop.
  • Внутри Foreach Loop добавьте задачу потока данных с источником плоских файлов, используя тот же диспетчер соединений.Затем добавьте адресата OLE DB или SQL Server с целевым подключением и подключите к нему источник плоских файлов.Я обнаружил, что назначения SQL Server работают лучше, но вам нужно проверить это в своей среде, прежде чем делать выбор.Выберите нужную таблицу и сопоставьте столбцы из источника плоских файлов соответственно.

    List<string> fileList = new List<string>();
    
    //get files from input directory
    DirectoryInfo di = new DirectoryInfo(Dts.Variables["User::FilePathVariable"].Value.ToString());
    
    foreach (FileInfo f in di.GetFiles())
    {
        //check for files with name containing text
        if (f.Name.IndexOf(Dts.Variables["$Package::FileNameParameter"].Value.ToString(), 0, StringComparison.CurrentCultureIgnoreCase) >= 0)
        {
            fileList.Add(f.FullName);
        }
    }
    
    //populate object variable
    Dts.Variables["User::YourObjectVariable"].Value = fileList;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...