Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
}
}
}