Открыть сервис

Системные переменные SSIS

Системные переменные SSIS — это предопределённый набор переменных, доступных только для чтения в среде выполнения пакетов служб SQL Server Integration Services (SSIS). Они предоставляют информацию о контексте выполнения пакета, его задачах, контейнерах и обработчиках событий. Системные переменные автоматически создаются средой выполнения SSIS и не могут быть удалены, переименованы или изменены пользователем.

Назначение и область применения

Системные переменные предназначены для обеспечения доступа к метаданным и состоянию выполнения пакета. Они позволяют разработчикам и администраторам получать информацию о:

  • Идентификации пакета: имя, уникальный идентификатор (GUID), версия.
  • Конфигурации выполнения: режим запуска, имя компьютера, учётная запись пользователя.
  • Состоянии выполнения: время начала, результат выполнения, идентификатор экземпляра выполнения.
  • Иерархии объектов: имя и идентификатор родительского контейнера или задачи.

Эти переменные используются в выражениях, скриптах, задачах «Выполнение SQL», «Скрипт-задача» и «Скрипт-компонент», а также в конфигурациях пакета. Они незаменимы для ведения журнала, динамического построения путей к файлам, условного ветвления и отладки.

Классификация системных переменных

Системные переменные классифицируются по области действия (scope). Каждая переменная принадлежит определённому уровню иерархии пакета: сам пакет, контейнер (например, «Цикл по каждому элементу» или «Последовательность»), задача или обработчик событий.

Переменные уровня пакета

Эти переменные доступны во всех элементах пакета, если не переопределены на более низком уровне.

Имя переменнойТип данныхОписание
System::PackageIDStringУникальный идентификатор (GUID) пакета.
System::PackageNameStringИмя файла пакета (без расширения .dtsx).
System::StartTimeDateTimeДата и время начала выполнения пакета.
System::UserNameStringУчётная запись пользователя, запустившего пакет.
System::MachineNameStringИмя компьютера, на котором выполняется пакет.
System::CreationDateDateTimeДата и время создания пакета.
System::CreatorComputerNameStringИмя компьютера, на котором был создан пакет.
System::CreatorNameStringИмя пользователя, создавшего пакет.
System::VersionBuildInt32Номер сборки версии пакета.
System::VersionMajorInt32Основной номер версии пакета.
System::VersionMinorInt32Дополнительный номер версии пакета.
System::VersionCommentsStringКомментарии к версии пакета.
System::VersionGUIDStringУникальный идентификатор (GUID) версии пакета.

Переменные уровня контейнера

Доступны внутри контейнера, в котором они определены, и во всех его дочерних элементах.

Имя переменнойТип данныхОписание
System::ContainerNameStringИмя контейнера (например, «Последовательность», «Цикл по каждому элементу») или задачи.
System::ContainerStartTimeDateTimeДата и время начала выполнения контейнера.
System::ExecutionInstanceGUIDStringУникальный идентификатор (GUID) экземпляра выполнения контейнера.
System::ParentContainerNameStringИмя родительского контейнера.
System::SourceIDStringУникальный идентификатор (GUID) задачи или контейнера, вызвавшего выполнение.
System::TaskNameStringИмя задачи, которая в данный момент выполняется.

Переменные уровня обработчика событий

Доступны только в контексте обработчика событий (например, OnError, OnPreExecute, OnPostExecute).

Имя переменнойТип данныхОписание
System::ErrorCodeInt32Код ошибки, связанной с событием.
System::ErrorDescriptionStringОписание ошибки.
System::ExecutionStatusInt32Статус выполнения задачи или контейнера (0 — успех, 1 — сбой).
System::EventTypeInt32Тип события (например, OnError — 0, OnWarning — 1).
System::SourceNameStringИмя объекта, вызвавшего событие.
System::SubComponentStringИмя подкомпонента, вызвавшего событие (если применимо).

Переменные уровня цикла по каждому элементу (Foreach Loop)

Доступны только внутри контейнера «Цикл по каждому элементу».

Имя переменнойТип данныхОписание
System::ForEachEnumeratorValueObjectТекущее значение, возвращаемое перечислителем цикла.

Особенности использования

  • Только для чтения: системные переменные нельзя изменить напрямую. Попытка присвоить им значение в выражении или скрипте приведёт к ошибке выполнения.
  • Тип данных: все системные переменные имеют строго определённый тип данных, как указано в таблицах выше. Это необходимо учитывать при использовании в выражениях и преобразованиях.
  • Доступность: системные переменные доступны во всех областях пакета, но их значения могут различаться в зависимости от контекста. Например, System::TaskName в обработчике событий будет содержать имя задачи, вызвавшей событие, а в контейнере верхнего уровня — имя самого контейнера.
  • Отладка: системные переменные часто используются в задачах «Скрипт-задача» для вывода диагностической информации в окно вывода или журнал. Например, запись System::PackageName и System::StartTime позволяет отслеживать, какой пакет и когда был запущен.
  • Динамическое построение путей: переменная System::PackageName может использоваться для создания уникальных имён файлов журналов или выходных данных, чтобы избежать конфликтов при параллельном выполнении пакетов.

Примеры применения

  1. Логирование ошибок: в обработчике событий OnError можно записать в таблицу базы данных значения System::ErrorDescription, System::SourceName, System::PackageName и System::StartTime для последующего анализа сбоев.
  1. Условное выполнение: в выражении для свойства Disable задачи можно использовать условие: @[System::UserName] != "DOMAIN\ServiceAccount". Это позволит выполнять задачу только при запуске от имени определённой учётной записи.
  1. Генерация отчётов: в задаче «Выполнение SQL» можно использовать System::PackageName как параметр для вставки в таблицу статистики: INSERT INTO dbo.PackageRunLog (PackageName, StartTime) VALUES (?, ?).
  1. Управление версиями: при развёртывании пакета можно проверять System::VersionMajor и System::VersionMinor в скрипте, чтобы убедиться, что используется актуальная версия.

Отличие от пользовательских переменных

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

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →