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

Задача скрипт SSIS

Задача «Скрипт» (Script Task) — это компонент служб Microsoft SQL Server Integration Services (SSIS), предназначенный для выполнения пользовательского кода на языках C# или VB.NET в рамках пакета ETL (Extract, Transform, Load). Задача позволяет реализовать логику, которая не может быть выполнена с помощью стандартных встроенных задач SSIS, таких как обработка сложных условных переходов, работа с файловыми системами, вызов внешних API, манипуляции с данными на уровне строк или выполнение сложных вычислений.

Общие сведения

Задача «Скрипт» является одним из наиболее гибких инструментов SSIS. Она предоставляет среду выполнения .NET Framework (или .NET Core в более поздних версиях) внутри конвейера обработки данных. В отличие от компонента «Скрипт» (Script Component), который используется в потоке данных для преобразования записей, задача «Скрипт» работает в потоке управления и не имеет прямого доступа к буферам данных. Её основное назначение — расширение возможностей пакета за счёт написания произвольного кода.

История и развитие

Задача «Скрипт» появилась в SQL Server 2005 вместе с первой версией SSIS. В SQL Server 2008 и 2008 R2 были улучшены возможности отладки и добавлена поддержка .NET Framework 3.5. В SQL Server 2012 произошло значительное обновление: среда разработки перешла на Visual Studio 2010 Shell, была добавлена поддержка .NET Framework 4.0. Начиная с SQL Server 2019, в рамках проекта SSIS в Azure Data Factory и в SQL Server 2022, задача «Скрипт» поддерживает .NET Core 3.1 и .NET 6.0 (в зависимости от версии), что обеспечивает кроссплатформенность и улучшенную производительность.

Архитектура и работа

Среда выполнения

Задача «Скрипт» использует среду CLR (Common Language Runtime) .NET. При выполнении пакета SSIS код задачи компилируется в сборку (DLL) и загружается в память процесса DtsDebugHost.exe (в режиме отладки) или ISServerExec.exe (в режиме выполнения). Задача может работать как в 32-разрядном, так и в 64-разрядном режиме, в зависимости от настроек пакета и версии SQL Server.

Редактор задачи

Настройка задачи производится в редакторе, который вызывается из конструктора SSIS. Редактор содержит несколько вкладок:

  • Общие — задаётся имя и описание задачи.
  • Скрипт — указывается язык (C# или VB.NET), точка входа (метод Main), а также ссылки на внешние сборки и пространства имён.
  • Выражения — позволяет динамически задавать свойства задачи с помощью выражений SSIS.

Код задачи

Внутри задачи разработчик пишет код в методе Main, который возвращает значение типа DtsExecResult (успех, неудача, завершение). Доступ к переменным, соединениям и событиям пакета осуществляется через объект Dts (глобальный контекст задачи). Например:

```csharp public void Main() { // Чтение переменной string myVar = Dts.Variables["User::MyVariable"].Value.ToString();

// Выполнение логики // ...

Dts.TaskResult = (int)ScriptResults.Success; } ```

Основные возможности

Работа с переменными

Задача может читать и записывать значения переменных пакета. Переменные могут быть как системными, так и пользовательскими. Доступ к переменным осуществляется через коллекцию Dts.Variables. Для записи значения переменной необходимо установить свойство ReadWriteVariables в редакторе задачи.

Управление соединениями

Задача может использовать диспетчеры соединений, определённые в пакете. Например, можно открыть соединение с базой данных, выполнить запрос или команду, используя ADO.NET. Для этого в редакторе задачи указываются диспетчеры соединений, которые будут доступны через коллекцию Dts.Connections.

Обработка ошибок и событий

Задача может генерировать пользовательские события, записывать сообщения в журнал SSIS, а также вызывать обработчики ошибок. Для этого используются методы Dts.Events.FireInformation, Dts.Events.FireError и другие.

Вызов внешних компонентов

Код задачи может использовать любые библиотеки .NET, включая сторонние. Это позволяет, например, отправлять HTTP-запросы, работать с XML, JSON, ZIP-архивами, вызывать COM-объекты и т.д.

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

  • Валидация данных — проверка форматов, диапазонов, уникальности записей перед загрузкой.
  • Генерация отчётов — формирование текстовых файлов, HTML-страниц или Excel-документов с помощью библиотек EPPlus или ClosedXML.
  • Интеграция с внешними системами — вызов REST API, отправка электронной почты через SMTP (если встроенная задача «Отправить почту» не подходит).
  • Сложная обработка файлов — чтение CSV с нестандартными разделителями, обработка бинарных файлов, работа с файловыми системами (копирование, перемещение, удаление с условиями).
  • Динамическое построение SQL-запросов — формирование запросов на основе метаданных или параметров.
  • Управление выполнением пакета — приостановка, возобновление, завершение пакета по условию.

Преимущества и ограничения

Преимущества

  • Гибкость — возможность реализации любой логики, не предусмотренной встроенными задачами.
  • Производительность — код выполняется в среде .NET, что обеспечивает высокую скорость работы.
  • Интеграция — полный доступ к переменным, соединениям и событиям пакета.
  • Отладка — возможность установки точек останова, пошагового выполнения и просмотра значений переменных в среде Visual Studio.

Ограничения

  • Сложность поддержки — код на C# или VB.NET требует навыков программирования и может быть сложен для неподготовленных разработчиков.
  • Версионирование — при изменении кода задачи необходимо перекомпилировать пакет.
  • Зависимость от .NET — задача требует установленной среды .NET на сервере выполнения (в актуальных версиях — .NET Core).
  • Отсутствие доступа к потоку данных — задача не может напрямую обрабатывать строки из источников данных; для этого используется компонент «Скрипт» в потоке данных.

Сравнение с другими задачами

ХарактеристикаЗадача «Скрипт»Встроенные задачи (например, «Выполнение SQL», «Обработка файлов»)
ГибкостьМаксимальнаяОграниченная функциональностью задачи
ПроизводительностьВысокая (собственный код)Высокая (оптимизирована под конкретную операцию)
СложностьТребует программированияНизкая (настройка через параметры)
ПоддержкаТребует квалифицированного разработчикаМожет выполняться администраторами баз данных

Интересные факты

  • Задача «Скрипт» может быть использована для создания пользовательских задач, которые затем можно повторно использовать в других пакетах, если код вынесен в отдельную сборку.
  • В SSIS 2012 и выше появилась возможность использовать задачу «Скрипт» в режиме «только для чтения» для переменных, что повышает производительность при параллельном выполнении.
  • В некоторых случаях задача «Скрипт» может быть заменена задачей «Выражение» (Expression Task), которая появилась в SSIS 2012 и позволяет выполнять простые операции без написания кода.

Источники

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

На главную BFOmetr →