SSIS 2017 L oop через файлы Excel и получить имя файла из сценария задачи - PullRequest
1 голос
/ 02 апреля 2020

Я застрял на вышеуказанном.

Обзор

Я создал пакет служб SSIS, который просматривает папку с файлами Excel, извлекает данные из них. файлы и вставки в таблицу SQL.

Каждый день создается новая папка в соответствии с 30 03 2020, 31 03 2020, 01 04 2020, et c.

Мой пакет справляется с этим и работает от начала до конца без помех.

Однако я хочу добавить имя файла к каждому набору данных в целевой таблице SQL посредством столбца Производные.

Здесь у меня проблема.

Я могу добавить полный путь к файлу и имя, но мне кажется, что я не могу извлечь имя файла самостоятельно.

Среда

Я создал контейнер ForEachL oop, в котором я установил для Enumerator значение «Foreach File Enumerator», добавил полный путь к папке и установил для файлов значение « .xl »

Для параметра «Получить имя файла» задано значение «Полностью квалифицировано»

В сопоставлениях переменных я добавил переменную strFullFilePath с индексом 0.

Затем я добавил в поток данных и большинство недавно задача «Сценарий».

Из потока данных я перетащил в источник Excel.

Я создал диспетчер подключений Excel, указав полный путь и имя файла одного из файлов. Я хотел загрузить.

Я установил для моего режима доступа к данным команду SQL из переменной.

Сохраняя это, я установил свойство диспетчера подключений Excel для передачи имени файла dynamici c превзойти строку подключения во время выполнения меня, добавив переменную @ [User :: strFullFilePath] в выражение ExcelFilePath.

Я закончил, создав назначение OLE DB SQL SERVER для моей целевой таблицы и сопоставил поля.

Пакет работал без проблем и загружал все файлы, пока я не добавил задачу «Сценарий» и следовал некоторым советам, которые я видел в сети.

Задача «Сценарий» в настоящее время настроена следующим образом: -

Microsoft Visual Basi c 2017

Точка входа: - Main

ReadWriteVariables: - User :: strFullFilePath

Когда вы редактируете скрипт, у меня есть код : -

Publi c Sub Main ()

    Dts.Variables("strFullFilePath").Value = System.IO.Path.GetFileName(Dts.Variables("strFullFilePath").Value.ToString())

    Dts.TaskResult = ScriptResults.Success

End Sub

Когда я сейчас запускаю пакет, задача скрипта, кажется, выполняется нормально, но загрузка основного файла Excel завершается неудачно с сообщением «[Основной источник данных Excel [2]] Ошибка: невозможно получить информацию о столбце из источника данных. Убедитесь, что ваша целевая таблица в базе данных доступна. ”

Я не уверен, но может показаться, что Пакет теперь думает, что Путь к файлу - это 0, который мы ввели в Для каждого L oop Контейнер.

Я пробовал несколько различных сценариев ios, помещая «User ::» перед именем переменной в скрипте, а также пробуя следующее: -

Dts.Variables ("strFileName"). Value = System.IO.Path.GetFileName (Dts.Variables ("strFullFilePath"). Value.ToString ())

Но это просто дает мне задачу сценария DTS: Ошибка выполнения: - Исключение было выдвинуто целью вызова.

Теперь я полностью озадачен.

Любая помощь / предложения будут с благодарностью.

С уважением,

NJ C

1 Ответ

1 голос
/ 03 апреля 2020

Думаю, я мог бы решить эту проблему.

Я добавил переменную strFileName в контейнер For Each L oop в strFullFileName с индексом 1.

У меня есть изменен сценарий VB: -

Dts.Variables ("strFileName"). Value = System.IO.Path.GetFileName (Dts.Variables ("strFileName"). Value.ToString ())

и теперь я могу увидеть имя файла в окне «Debug Locals» и опубликовать результаты в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...