Использование переменных в задаче «Скрипт»
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Переменные позволяют задаче «Скрипт» обмениваться данными с другими объектами в пакете. Дополнительные сведения см. в статье Переменные в службах Integration Services (SSIS).
В задаче "Скрипт" используется свойство Variables объекта Dts для чтения из объектов Variable в пакете и записи в них.
Примечание.
Свойство Value класса Variable имеет тип Object. В задаче "Скрипт" включен параметр Option Strict, поэтому необходимо привести свойство Value к соответствующему типу, прежде чем можно будет его использовать.
Необходимо добавить существующие переменные в списки ReadOnlyVariables и ReadWriteVariables в редакторе задачи "скрипт", чтобы сделать их доступными в пользовательском скрипте. Помните, что в именах переменных учитывается регистр. В скрипте обращаться к переменным обоих типов можно с помощью свойства Variables объекта Dts. Используйте свойство Value, чтобы считывать значения отдельных переменных и записывать значения в них. Задача «Скрипт» обеспечивает прозрачное для пользователя управление блокировкой во время считывания и изменение значений переменных в скрипте.
Чтобы проверить наличие переменной перед ее использованием в коде, можно использовать метод Contains коллекции Variables, возвращенной свойством Variables.
Для работы с переменными в задаче "скрипт" можно также использовать свойство VariableDispenser (Dts.VariableDispenser). При использовании свойства VariableDispenser необходимо обрабатывать в коде и семантику блокирования, и приведение типов данных для значений переменных. Может потребоваться использовать свойство VariableDispenser вместо свойства Variables, если возникает необходимость работать с переменной, недоступной во время разработки, но создаваемой программным путем во время выполнения.
Использование задачи «Скрипт» в контейнере «цикл по каждому элементу»
Если задача «Скрипт» неоднократно запускается в контейнере «цикл по каждому элементу», то в скрипте обычно требуется обеспечить работу с содержимым текущего элемента в перечислителе. Например, при использовании перечислителя с циклом по каждому файлу в скрипте требуется определить имя текущего файла, а при использовании перечислителя ADO по каждой строке в скрипте необходимо получать содержимое столбцов в текущей строке данных.
Переменные делают возможной такую связь между контейнером «цикл по каждому элементу» и задачей «Скрипт». На странице Сопоставления переменной окна Редактор циклов по каждому элементу необходимо присвоить переменные каждому элементу данных, возвращаемому одним перечисленным элементом. Например, перечислитель с циклом по каждому файлу возвращает только имя файла из позиции с индексом 0 и поэтому требует сопоставления лишь с одной переменной, а перечислитель, который возвращает несколько столбцов данных из каждой строки, требует сопоставить отдельную переменную с каждым столбцом, предназначенным для использования в задаче «Скрипт».
После сопоставления перечисленных элементов с переменными необходимо добавить сопоставленные переменные к свойству ReadOnlyVariables на странице Скрипт окна редактора задачи "скрипт", чтобы сделать их доступными в скрипте. Пример применения задачи "Скрипт" в контейнере "цикл по каждому элементу" для обработки файлов изображений в папке см. в разделе Работа с изображениями в задаче "Скрипт".
Пример использования переменных
В следующем примере показано, как получить доступ и использовать переменные в задаче «Скрипт», чтобы определить пути рабочего процесса пакета. В этом образце предполагается, что в редакторе задачи "скрипт" созданы и добавлены к коллекции ReadOnlyVariables целочисленные переменные CustomerCount
и MaxRecordCount
. Переменная CustomerCount
содержит количество записей с данными заказчиков, которые должны быть импортированы. Если это значение больше значения MaxRecordCount
, задача «Скрипт» сообщает о неудачном завершении. Если неудачное завершение возникает из-за превышения порогового значения MaxRecordCount
, в пути обработки ошибок рабочего процесса можно реализовать все необходимые операции очистки.
Чтобы успешно откомпилировать этот образец, необходимо добавить ссылку на сборку Microsoft.SqlServer.ScriptTask.
Public Sub Main()
Dim customerCount As Integer
Dim maxRecordCount As Integer
If Dts.Variables.Contains("CustomerCount") = True AndAlso _
Dts.Variables.Contains("MaxRecordCount") = True Then
customerCount = _
CType(Dts.Variables("CustomerCount").Value, Integer)
maxRecordCount = _
CType(Dts.Variables("MaxRecordCount").Value, Integer)
End If
If customerCount > maxRecordCount Then
Dts.TaskResult = ScriptResults.Failure
Else
Dts.TaskResult = ScriptResults.Success
End If
End Sub
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
public class ScriptMain
{
public void Main()
{
int customerCount;
int maxRecordCount;
if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true)
{
customerCount = (int) Dts.Variables["CustomerCount"].Value;
maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value;
}
if (customerCount>maxRecordCount)
{
Dts.TaskResult = (int)ScriptResults.Failure;
}
else
{
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
См. также
Переменные в службах Integration Services (SSIS)
Использование переменных в пакетах