Použití proměnných v úloze skriptu

Platí pro:SQL Server SSIS Integration Runtime v rámci Azure Data Factory

Proměnné umožňují úkolu Script vyměňovat data s dalšími objekty v balíčku. Další informace najdete v tématu Proměnné služby SSIS (Integration Services).

Úloha Script využívá Variables vlastnost objektu DTS pro čtení a zápis Variable do objektů v balíčku.

Note

Vlastností Value třídy Variable je typ Object. Protože skriptní úloha má zapnutou možnost Striktní volbu , musíte vlastnost přenést Value na správný typ, než ji můžete použít.

Do seznamu a ReadWriteVariables přidáváte existující ReadOnlyVariables proměnné v editoru úloh skriptu, abyste je zpřístupnili vlastnímu skriptu. Mějte na paměti, že názvy proměnných jsou citlivé na velikost písmen. Ve skriptu přistupujete k proměnným obou typů prostřednictvím Variables vlastnosti objektu DTS . Použijte vlastnost Value pro čtení a zápis do jednotlivých proměnných. Úloha Script transparentně spravuje zamykání při čtení a úpravě hodnot proměnných skriptem.

Můžete použít Contains metodu Variables kolekce vrácené vlastností Variables k ověření existence proměnné před jejím použitím ve vašem kódu.

Vlastnost VariableDispenser (Dts.VariableDispenser) můžete také použít k práci s proměnnými v úlohě Script. Při použití VariableDispenser, musíte řešit jak zamykací sémantiku, tak přetváření datových typů pro proměnné hodnoty ve svém vlastním kódu. Možná budete muset použít vlastnost VariableDispenser místo vlastnosti, Variables pokud chcete pracovat s proměnnou, která není dostupná při návrhu, ale je vytvořena programově za běhu.

Použití skriptové úlohy v kontejneru Foreach Loop

Když se skriptní úloha opakovaně spouští v kontejneru Foreach Loop, skript obvykle musí pracovat s obsahem aktuální položky v enumerátoru. Například při použití enumerátoru Foreach File skript potřebuje znát aktuální název souboru; při použití Foreach ADO enumerátoru musí skript znát obsah sloupců v aktuálním řádku dat.

Proměnné umožňují tuto komunikaci mezi kontejnerem Foreach Loop a úlohou Script. Na stránce Mappings proměnných v editoru smyček Foreach přiřaďte proměnné ke každému datovému prvku, který je vrácen jednou enumerovanou položkou. Například enumerátor souboru Foreach vrací pouze název souboru na indexu 0, a proto vyžaduje mapování pouze jedné proměnné, zatímco enumerátor, který vrací několik sloupců dat v každém řádku, vyžaduje, abyste na každý sloupec, který chcete použít ve skriptové úlohě, namapoval jinou proměnnou.

Poté, co jste namapovali enumerované položky na proměnné, musíte tyto mapované proměnné přidat do vlastnosti ReadOnlyVariables na stránce Script v Script Task Editoru , abyste je zpřístupnili svému skriptu. Pro příklad skriptové úlohy v kontejneru Foreach Loop, která zpracovává obrazové soubory ve složce, viz Práce s obrázky pomocí skriptní úlohy.

Příklad proměnných

Následující příklad ukazuje, jak přistupovat k proměnným ve skriptové úlohě a používat je k určení cesty workflow balíčku. Vzorek předpokládá, že jste vytvořili celočíselné proměnné pojmenované CustomerCount a MaxRecordCount přidané do kolekce ReadOnlyVariables v editoru úloh skriptů. Proměnná CustomerCount obsahuje počet zákaznických záznamů, které mají být importovány. Pokud je jeho hodnota větší než hodnota , MaxRecordCountskriptní úloha hlásí selhání. Když dojde k selhání, protože MaxRecordCount byl překročen práh, chybová cesta pracovního toku může provést jakékoli potřebné čištění.

Pro úspěšné zkompilování vzorku je potřeba přidat odkaz na 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;  
        }  
  
    }  
  
}