Używanie zmiennych w zadaniu skryptu

Dotyczy:SQL Server Środowisko SSIS Integration Runtime w usłudze Azure Data Factory

Zmienne umożliwiają zadaniu skryptu wymianę danych z innymi obiektami w pakiecie. Aby uzyskać więcej informacji, zobacz zmienne Integration Services (SSIS).

Zadanie Script wykorzystuje Variables właściwość obiektu DTS do odczytu i zapisu Variable do obiektów w pakiecie.

Note

Własnością ValueVariable klasy jest typ Object. Ponieważ zadanie skryptowe ma włączone opcję Strict , musisz Value przypisać właściwy typ właściwości, zanim będziesz mógł jej użyć.

Dodajesz istniejące zmienne do ReadOnlyVariables list i ReadWriteVariables w edytorze zadań skryptu , aby udostępnić je niestandardowemu skryptowi. Pamiętaj, że nazwy zmiennych są zależne od wielkości liter. W skrypcie uzyskujesz dostęp do zmiennych obu typów poprzez Variables właściwość obiektu DTS . Użyj właściwości Value do odczytu i zapisu do poszczególnych zmiennych. Zadanie skryptu transparentnie zarządza blokowaniem podczas odczytu i modyfikacją wartości zmiennych.

Możesz użyć Contains metody Variables kolekcji zwracanej przez tę właściwość Variables , aby sprawdzić istnienie zmiennej przed użyciem jej w kodzie.

Możesz też użyć VariableDispenser właściwości (Dts.VariableDispenser) do pracy ze zmiennymi w zadaniu skryptowym. Używając VariableDispenser, musisz zajmować się zarówno semantyką blokowania, jak i obsługą typów danych dla wartości zmiennych w swoim kodzie. Możesz potrzebować użyć właściwości VariableDispenser zamiast własności, Variables jeśli chcesz pracować ze zmienną, która nie jest dostępna w momencie projektowania, ale jest tworzona programowo w czasie działania.

Użycie zadania skryptowego w kontenerze pętli foreach

Gdy zadanie skryptu działa wielokrotnie w kontenerze pętli Foreach, skrypt zwykle musi pracować z zawartością aktualnego elementu w enumeratorze. Na przykład, używając enumeratora Foreach File, skrypt musi znać aktualną nazwę pliku; przy użyciu enumeratora Foreach ADO, skrypt musi znać zawartość kolumn w bieżącym wierszu danych.

Zmienne umożliwiają komunikację między kontenerem Foreach Loop a zadaniem skryptowym. Na stronie Mappings zmiennych w edytorze pętli Foreach przypisz zmienne do każdego elementu danych zwracanego przez pojedynczy wyliczony element. Na przykład enumerator pliku Foreach zwraca tylko nazwę pliku na indeksie 0 i dlatego wymaga tylko jednej zmiennej, podczas gdy enumerator, który zwraca kilka kolumn danych w każdym wierszu, wymaga przypisania innej zmiennej do każdej kolumny, którą chcesz użyć w zadaniu skryptowym.

Po odwzorowaniu wyliczonych elementów na zmienne, musisz dodać te zmienne do właściwości ReadOnlyVariables na stronie skryptu w edytorze zadań skryptu , aby były dostępne dla twojego skryptu. Przykład zadania skryptowego w kontenerze pętli Foreach, które przetwarza pliki obrazów w folderze, można znaleźć w artykule Praca z obrazami w zadaniu skryptowym.

Przykład zmiennych

Poniższy przykład pokazuje, jak uzyskać dostęp i wykorzystać zmienne w zadaniu skryptowym do określenia ścieżki przepływu pracy pakietu. Próbka zakłada, że stworzyłeś zmienne całkowitoliczbowe nazwane CustomerCount i MaxRecordCount dodałeś je do kolekcji ReadOnlyVariables w edytorze zadań skryptowych. Zmienna zawiera CustomerCount liczbę rekordów klientów do importowania. Jeśli jego wartość jest większa niż wartość MaxRecordCount, zadanie skryptowe zgłasza niepowodzenie. Gdy wystąpi awaria z powodu MaxRecordCount przekroczenia progu, ścieżka błędu przepływu może wykonać wymagane oczyszczenie.

Aby pomyślnie skompilować próbkę, musisz dodać odniesienie do Microsoft. SqlServer.ScriptTask assembly.

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;  
        }  
  
    }  
  
}