Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SSIS Integration Runtime i Azure Data Factory
Variabler gör det möjligt för Script-uppgiften att utbyta data med andra objekt i paketet. Mer information finns i SSIS-variabler (Integration Services).
Skriptuppgiften använder egenskapen Variables hos Dts-objektet för att läsa från och skriva till Variable objekt i paketet.
Note
Egenskapen Value för Variable klassen är av typen Objekt. Eftersom Script-uppgiften har Option Strict aktiverad måste du kasta egenskapen Value till rätt typ innan du kan använda den.
Du lägger till befintliga variabler i ReadOnlyVariables och-listorna ReadWriteVariables i Script Task Editor för att göra dem tillgängliga för det anpassade skriptet. Tänk på att variabelnamn är kasuskänsliga. Inom skriptet får du tillgång till variabler av båda typerna via egenskapen Variables hos Dts-objektet . Använd egenskapen Value för att läsa från och skriva till individuella variabler. Uppgiften Script hanterar låsning transparent medan skriptet läser och ändrar variablernas värden.
Du kan använda Contains metoden för samlingen Variables som returneras av egenskapen Variables för att kontrollera om en variabel existerar innan du använder den i din kod.
Du kan också använda egenskapen VariableDispenser (Dts.VariableDispenser) för att arbeta med variabler i Script-uppgiften. När du använder VariableDispenser, måste du hantera både låssemantiken och casting av datatyper för variabelvärden i din egen kod. Du kan behöva använda egenskapen VariableDispenser istället för egenskapen Variables om du vill arbeta med en variabel som inte är tillgänglig vid designtillfället men som skapas programmatiskt vid körning.
Att använda skriptuppgiften inom en Foreach-loopbehållare
När en Script-uppgift körs upprepade gånger inom en Foreach Loop-container behöver skriptet vanligtvis arbeta med innehållet i det aktuella objektet i enumeratorn. Till exempel, när man använder en Foreach-filenumerator måste skriptet känna till det aktuella filnamnet; när man använder en Foreach ADO-enumerator måste skriptet känna till innehållet i kolumnerna i den aktuella dataraden.
Variabler gör denna kommunikation mellan Foreach Loop-containern och Script-uppgiften möjlig. På sidan Variabelmappningar i Foreach Loop Editor, tilldela variabler till varje dataobjekt som returneras av ett enda enumererat objekt. Till exempel returnerar en Foreach File-enumerator endast ett filnamn vid Index 0 och kräver därför endast en variabelmappning, medan en enumerator som returnerar flera kolumner med data i varje rad kräver att du mappar en annan variabel till varje kolumn du vill använda i Script-uppgiften.
Efter att du har mappat uppräknade objekt till variabler måste du lägga till de mappade variablerna i egenskapen ReadOnlyVariables på Script-sidan i Script Task Editor för att göra dem tillgängliga för ditt skript. För ett exempel på en Script-uppgift inom en Foreach Loop-container som bearbetar bildfilerna i en mapp, se Arbeta med bilder med Script-uppgiften.
Variabelexempel
Följande exempel visar hur man kan komma åt och använda variabler i en Script-uppgift för att bestämma vägen för paketarbetsflödet. Exemplet antar att du har skapat heltalsvariabler med namnet CustomerCount och MaxRecordCount lagt till dem i samlingen ReadOnlyVariables i Script Task Editor. Variabeln CustomerCount innehåller antalet kundposter som ska importeras. Om dess värde är större än värdet av MaxRecordCount, rapporterar Skriptuppgiften misslyckande. När ett fel uppstår eftersom tröskeln MaxRecordCount har överskridits kan arbetsflödets felväg genomföra vilken rensning som helst som krävs.
För att lyckas sammanställa provet måste du lägga till en referens till Microsoft. SqlServer.ScriptTask assembler.
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;
}
}
}