Как отметили @Yuck и @devarc, есть два разных значения: Переменная .Значение времени разработки - это значение, которое вы назначаете при первом создании переменной.В вашем случае переменная содержит C: \ Test.txt в качестве значения времени разработки.Каждый раз, когда вы открываете пакет, он будет показывать C: \ Test.txt, пока вы не измените его в
![CurrentFile](https://i.stack.imgur.com/WzINn.png)
Чтобы изменить значение переменной во время работы пакета,Вы можете либо установить значение, либо рассчитать его.Здесь я создал переменную уровня пакета CurrentFile
со значением C: \ Test.txt
Одна вещь, которая часто сбивает людей с толку, это то, что они правильно изменили значение времени выполнения, но когда они запускаютсяэто в BIDS, они видят «старое» значение.Значение, отображаемое в окне переменных, не изменяется во время выполнения пакета.
![enter image description here](https://i.stack.imgur.com/t3dHH.png)
Во время выполнения пакета в моем окне переменных по-прежнему отображается значение времени разработки (C: \ Test.txt) но истинное значение отражается в окне Locals (C: \ Test2.txt)
Установка значения
Значение большинства всего в SSIS может быть установлено во время выполнения с помощьюнабор подробных параметров командной строки или через конфигурацию источников.Самое большое различие, на мой взгляд, заключается в том, что этот подход заключается в том, что значение всегда будет значением в течение всего времени выполнения пакета.Последовательные или параллельные вызовы пакета могут изменить это значение, но для при выполнении значение останется постоянным (за исключением явного изменения значения.
/ SET
Команда-линейное выполнение (dtexec.exe), щелчок правой кнопкой мыши по пакету и запуск из файловой системы (dtexecUI.exe) или создание шага задания агента SQL в службах интеграции SQL Server - все это позволяет указать значение времени выполнения с помощью команды SET.Используя указанную выше переменную, следующая команда установит значение времени выполнения на C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Конфигурация
SSIS предлагает возможность создания источников конфигурации для предоставления значений времени выполнения дляПакеты. В статье, на которую я ссылался выше, гораздо лучше описываются плюсы и минусы параметров конфигурации, чем здесь. Я скажу, что обычно я использую оба - моя команда SET настраивает диспетчер соединений, который затем используетсяпакет, чтобы найти «полный» набор конфигураций пакета.
Вычисление значения
В службах SSIS существует множество задач, которые могут изменить значение переменной, а также использовать выражения для изменения значения.Я вижу это как вещи, которые влияют на ценность, пока пакет находится в полете.
Задачи
Задача сценария - один из наиболее часто используемых механизмов для начинающих, но я нахожу другие инструменты винструментарий служб SSIS, как правило, лучше подходит для изменения значений переменных.
Контейнер цикла по каждому элементу и Задача «Выполнение SQL» - две другие большие задачи, на которые следует обратить внимание при назначениипеременное значение.
Выражения
Выражения - самая замечательная конфетка в наборе инструментов служб SSIS.Почти каждая «вещь» в SSIS предоставляет свойства для конфигурации.Это полезно, но использование назначения выражения для построения этих свойств является выдающимся.
Например, представьте 3 переменные RootFolder
, FileName
и ComputedCurrentFile
со значениями C: \, File2.txt и пустой строкой.В окне «Свойства» для ComputedCurrentFile
мы изменили бы значение EvaluateAsExpression с False на True, а затем использовали бы выражение вроде @[User::RootFolder]+ "\\" +@[User::FileName]
, которое просто объединяет значение первых двух переменных вместе.Это может быть полезно, если имя файла для обработки было стандартным, но исходная папка часто менялась.Или, если мы говорим о выводе, обычно используют выражения для построения имени выходного файла, используя дату и, возможно, время запуска пакета.
Наконец, ничто не мешает смешивать и сопоставлять эти подходы.Обычно я использую конфигурацию для указания перечислителя файлов на правильную начальную папку, а затем использую вычисленные значения для идентификации текущего файла для обработки.