SSIS. Как пропустить файлы в папке и получить путь + имена файлов и, наконец, выполнить хранимую процедуру с параметром в виде пути + имя файла

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

Ответ 1

Похоже, у вас есть правильная идея в целом, и ссылка @Speedbirt186 предоставила несколько хороших деталей, но похоже, что есть пара нюансов, которые, как я думал, я могу указать на поток и переменные.

Цикл foreach может присваивать переменной весь путь или имя файла или имя файла и расширение. Последнее будет наиболее полезным в вашем случае, если вы не хотите добавлять задачу script для разделения имени файла из этого пути. Если вы начнете с добавления в свой проект 5 переменных, это упростит работу. 1 будет путь исходного каталога, другой путь каталога назначения (архива), а затем 1 для хранения имени файла и расширения, назначенного для каждого цикла. Затем добавляются две дополнительные динамические переменные, которые просто объединяют исходный каталог и имя файла, чтобы получить полный путь источника и место назначения с именем файла, чтобы получить полный путь назначения.

введите описание изображения здесь

Затем убедитесь, что вы настроили подключения к базе данных и файла Excel. В соединении с файлом Excel после его настройки перейдите в "Выражения" в окне свойств и установите свойство "Строка соединения" в SourceFullPath. Это укажет на соединение, чтобы изменить путь к файлу на каждой итерации вашего цикла.

введите описание изображения здесь

Теперь вам просто нужно настроить ваш цикл и т.д. Добавьте каждый контейнер контейнера, задающий каталог, фильтр и выберите "Имя файла и расширение".

введите описание изображения здесь

Теперь в поле выражения на странице коллекции задано свойство каталога, которое будет иметь значение вашей переменной исходного каталога.

введите описание изображения здесь

Последняя часть цикла Fore for - это настроить сопоставления переменных для хранения имени файла в вашей переменной. поэтому перейдите на эту вкладку, выберите переменную имени файла и установите индекс на 0.

введите описание изображения здесь

В этот момент вы можете добавить поток данных и настроить свой импорт так же, как и с обычным файлом (обратите внимание, что ваше значение по умолчанию для параметра имени файла должно быть в фактическом файле со структурой, которую вы хотите импортировать).

После того, как ваш поток данных упадет в вашей задаче Execute SQL и настройте его, как вам нужно. вот пример прямого ввода, и вы можете видеть простой способ ссылки на параметр - это просто знак вопроса (?).

введите описание изображения здесь

Далее в вашей задаче sql настройте сопоставление параметров, добавив нужные детали, например:

введите описание изображения здесь

Теперь вы находитесь в своей файловой задаче. Отбросьте задание на файл и настройте его по своему усмотрению, но выберите переменные пути цели и источника, чтобы указать задачу, файл которой нужно переместить.

введите описание изображения здесь

чтобы это было сделано. есть еще одно замечание. То, как у вас есть приоритет, установленный в изображении, который вы опубликовали, показывает, что вы переходите от потока данных к вашему sql и к задаче файла одновременно. Если ваша хранимая процедура зависит от вашего файла, вы можете поместить ее после своей задачи sql. Вы всегда можете изменить параметры ограничения на "завершение", если вы хотите переместить файл, даже если ваш сохраненный процесс не работает.

введите описание изображения здесь введите описание изображения здесь

Ответ 2

Что вы хотите сделать, так это создать переменную в вашем пакете, назовите ее как имя файла. В окне "Редактирование" Foreach вы можете настроить эту переменную, которая будет установлена ​​(в индексе страниц с переменными сопоставления на 0).

Чтобы создать переменную, вам нужно будет отобразить окно переменных. Используйте меню "Вид", чтобы отобразить его, если он не открыт в данный момент.

Затем при вызове вашей хранимой процедуры вы можете передать текущее значение переменной в качестве параметра.

Эта ссылка может помочь: https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/