Verwenden von Variablen im Skripttask

Gilt für:SQL Server SSIS Integration Runtime in Azure Data Factory

Variablen ermöglichen es dem Skripttask, Daten mit anderen Objekten im Paket auszutauschen. Weitere Informationen finden Sie unter Integration Services-Variablen (SSIS).

Mithilfe der Variables-Eigenschaft des Dts-Objekts erhält der Skripttask Lese- und Schreibzugriff auf Variable-Objekte im Paket.

Hinweis

Die Value-Eigenschaft der Variable-Klasse ist vom Typ Object. Da für den Skripttask Option Strict aktiviert ist, müssen Sie die Value-Eigenschaft vor ihrer Verwendung in den richtigen Typ umwandeln.

Um bestehende Variablen für das benutzerdefinierte Skript verfügbar zu machen, fügen Sie diese den Listen ReadOnlyVariables und ReadWriteVariables im Skripttask-Editor hinzu. Beachten Sie, dass bei Variablennamen nach Groß-/Kleinschreibung unterschieden wird. Innerhalb des Skripts greifen Sie auf Variablen beider Typen über die Variables-Eigenschaft des Dts-Objekts zu. Mithilfe der Value-Eigenschaft erhalten Sie Lese- und Schreibzugriff auf einzelne Variablen. Der Skripttask verwaltet Sperren transparent, während das Skript die Werte von Variablen liest und ändert.

Mithilfe der Contains-Methode der Variables-Auflistung, die von der Variables-Eigenschaft zurückgegeben wird, können Sie das Vorhandensein von Variablen vor ihrer Verwendung im Code überprüfen.

Für die Arbeit mit Variablen im Skripttask können Sie auch die VariableDispenser-Eigenschaft (Dts.VariableDispenser) verwenden. Bei der Verwendung von VariableDispenser müssen Sie die Sperrsemantik und die Umwandlung von Datentypen für variable Werte in Ihrem Code berücksichtigen. Wenn Sie mit Variablen arbeiten möchten, die zur Entwurfszeit nicht zur Verfügung stehen, sondern programmgesteuert zur Laufzeit erstellt werden, müssen Sie möglicherweise auf die VariableDispenser-Eigenschaft anstelle der Variables-Eigenschaft zurückgreifen.

Verwenden des Skripttasks in einem Foreach-Schleifencontainer

Wenn ein Skripttask wiederholt innerhalb eines Foreach-Schleifencontainers ausgeführt wird, muss das Skript normalerweise auf den Inhalt des aktuellen Elements im Enumerator zugreifen. Bei der Verwendung eines Foreach-Dateienumerators muss das Skript beispielsweise über den aktuellen Dateinamen verfügen und bei der Verwendung eines Foreach-ADO-Enumerators über den Inhalt der Spalten in der aktuellen Datenzeile.

Variablen ermöglichen diese Kommunikation zwischen dem Foreach-Schleifencontainer und dem Skripttask. Weisen Sie jedem Datenelement, das von einem Enumerationselement zurückgegeben wird, im Foreach-Schleifen-Editor auf der Seite Variablenzuordnungen Variablen zu. Ein Foreach-Dateienumerator gibt z. B. nur am Index 0 einen Dateinamen zurück und erfordert daher nur eine Variablenzuordnung. Bei einem Enumerator, der in jeder Zeile mehrere Datenspalten zurückgibt, müssen Sie hingegen für jede Spalte, die Sie im Skripttask verwenden möchten, eine andere Variable zuordnen.

Nachdem Sie die Enumerationselemente Variablen zugeordnet haben, müssen Sie die zugeordneten Variablen im Skripttask-Editor auf der Seite Skript der ReadOnlyVariables-Eigenschaft hinzufügen, um Sie für das Skript zur Verfügung zu stellen. Ein Beispiel eines Skripttasks innerhalb eines Foreach-Schleifencontainers zur Verarbeitung der Bilddateien in einem Ordner finden Sie unter Arbeiten mit Bildern mithilfe des Skripttasks.

Variablenbeispiel

Das folgende Beispiel veranschaulicht den Zugriff auf und die Verwendung von Variablen in einem Skripttask zur Ermittlung des Pfads eines Paket-Workflows. In diesem Beispiel wird vorausgesetzt, dass die ganzzahligen Variablen CustomerCount sowie MaxRecordCount erstellt und der ReadOnlyVariables-Auflistung im Skripttask-Editor hinzugefügt wurden. Die CustomerCount-Variable enthält die Anzahl an Kundendatensätzen, die importiert werden sollen. Falls der Wert höher als der Wert von MaxRecordCount ist, gibt der Skripttask eine Fehlermeldung aus. Falls der Fehler auftritt, weil der MaxRecordCount-Schwellenwert überschritten wurde, kann der Fehlerpfad des Workflows alle erforderlichen Cleanup-Schritte implementieren.

Um das Beispiel erfolgreich zu kompilieren, müssen Sie einen Verweis auf die Microsoft.SqlServer.ScriptTask-Assembly hinzufügen.

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

Weitere Informationen

Integration Services-Variablen (SSIS)
Verwenden von Variablen in Paketen