Как изменить переменную в SSIS? - PullRequest
6 голосов
/ 30 января 2012

У меня есть простая строковая переменная со следующим значением: "C: \ Test.txt". Теперь я хотел бы отредактировать переменную так, чтобы она указывала на другой файл. Я не могу найти способ сделать это. Я могу изменить имя, тип данных, но не само значение! Нужно ли удалять переменную и создавать новую?

Обновление: Проблема вызвана тем, что для свойства «ReadOnly» установлено значение «True». Для типичных сценариев см. Принятый ответ ниже.

Ответы [ 2 ]

15 голосов
/ 30 января 2012

Как отметили @Yuck и @devarc, есть два разных значения: Переменная .Значение времени разработки - это значение, которое вы назначаете при первом создании переменной.В вашем случае переменная содержит C: \ Test.txt в качестве значения времени разработки.Каждый раз, когда вы открываете пакет, он будет показывать C: \ Test.txt, пока вы не измените его в

CurrentFile

Чтобы изменить значение переменной во время работы пакета,Вы можете либо установить значение, либо рассчитать его.Здесь я создал переменную уровня пакета CurrentFile со значением C: \ Test.txt

Одна вещь, которая часто сбивает людей с толку, это то, что они правильно изменили значение времени выполнения, но когда они запускаютсяэто в BIDS, они видят «старое» значение.Значение, отображаемое в окне переменных, не изменяется во время выполнения пакета.

enter image description here

Во время выполнения пакета в моем окне переменных по-прежнему отображается значение времени разработки (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], которое просто объединяет значение первых двух переменных вместе.Это может быть полезно, если имя файла для обработки было стандартным, но исходная папка часто менялась.Или, если мы говорим о выводе, обычно используют выражения для построения имени выходного файла, используя дату и, возможно, время запуска пакета.

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

8 голосов
/ 30 января 2012

Если вы хотите изменить его в конструкторе, просто щелкните правой кнопкой мыши на свободном месте и -> Переменные.

Но если вы хотите изменить его во время выполнения, я предлагаю вам:

  1. создать сценарий задачи
  2. выбрать язык
  3. добавить переменную в ReadWriteVariables.
  4. Редактировать сценарий.
  5. Например, в VB:

    Dts.Variables ("myVariable"). Значение = @ "C: \ Test2.txt";

    Dts.TaskResult = ScriptResults.Success

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