Använda variabler i skriptaktiviteten

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