Verwenden von Variablen im Skripttask
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 Variablen aufgezählte Elemente zugeordnet haben, müssen Sie der Eigenschaft auf der ReadOnlyVariables
Skriptseite des Skript-Aufgaben-Editors die zugeordneten Variablen hinzufügen, um sie für Ihr Skript verfügbar zu machen. 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. Im Beispiel wird davon ausgegangen, dass Sie ganzzahlige Variablen CustomerCount
benannt und MaxRecordCount
der ReadOnlyVariables
Auflistung im Skriptaufgaben-Editor hinzugefügt haben. 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;
}
}
}
Mit Integrationsdiensten auf dem neuesten Stand bleiben
Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Seite Integration Services auf MSDN:
Besuchen Sie die Integration Services-Seite auf MSDN
Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Updates zu erhalten.
Weitere Informationen
Integration Services-Variablen (SSIS)
Verwenden von Variablen in Paketen