Поделиться через


Использование переменных в задаче «Сценарий»

Переменные позволяют задаче «Сценарий» обмениваться данными с другими объектами в пакете. Дополнительные сведения см. в разделе Переменные служб Integration Services.

В задаче «Сценарий» используется свойство 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 (маленький)Будьте в курсе новых возможностей cлужб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.