Språk

Arbeta med variabler programmatiskt

Gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

Variabler är ett sätt att dynamiskt sätta värden och styra processer i paket, containrar, uppgifter och händelsehanterare. Variabler kan också användas av företrädesbegränsningar för att styra riktningen på dataflödet till olika uppgifter. Variabler har en mängd olika användningsområden:

Scope

Varje behållare har sin egen Variables samling. När en ny variabel skapas ligger den inom ramen för dess föräldracontainer. Eftersom paketbehållaren ligger högst upp i containerhierarkin fungerar variabler med paketomfattning som globala variabler och är synliga för alla containrar inom paketet. Samlingen av variabler för behållaren kan också nås av barnen till behållaren genom samlingen Variables , genom att använda antingen variabelnamnet eller variabelns index i samlingen.

Eftersom synligheten för en variabel är begränsad uppifrån och ner, är variabler deklarerade på paketnivå synliga för alla containrar i paketet. Därför inkluderar samlingen Variables på en behållare alla variabler som tillhör dess förälder utöver dess egna variabler

Omvänt är variablerna som ingår i en uppgift begränsade i omfattning och synlighet, och är endast synliga för uppgiften.

Om ett paket kör andra paket är variablerna definierade i omfånget för det anropande paketet tillgängliga för det anropade paketet. Det enda undantaget uppstår när en variabel med samma namn finns i det anropade paketet. När denna kollision inträffar åsidosätter variabelvärdet i det anropade paketet värdet från det anropande paketet. Variabler definierade inom det anropade paketets omfattning är aldrig tillgängliga för det anropande paketet.

Följande kodexempel skapar programmässigt en variabel, myCustomVar, i paketets omfattning, och itererar sedan genom alla variabler som är synliga för paketet, och skriver ut deras namn, datatyp och värde.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
  
namespace Microsoft.SqlServer.Dts.Samples  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      Application app = new Application();  
      // Load a sample package that contains a variable that sets the file name.  
      Package pkg = app.LoadPackage(  
        @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +  
        @"\Package Samples\CaptureDataLineage Sample\CaptureDataLineage\CaptureDataLineage.dtsx",  
        null);  
      Variables pkgVars = pkg.Variables;  
      Variable myVar = pkg.Variables.Add("myCustomVar", false, "User", "3");  
      foreach (Variable pkgVar in pkgVars)  
      {  
        Console.WriteLine("Variable: {0}, {1}, {2}", pkgVar.Name,  
          pkgVar.DataType, pkgVar.Value.ToString());  
      }  
      Console.Read();  
    }  
  }  
}  
Imports Microsoft.SqlServer.Dts.Runtime  
  
Module Module1  
  
  Sub Main()  
  
    Dim app As Application = New Application()  
    ' Load a sample package that contains a variable that sets the file name.  
    Dim pkg As Package = app.LoadPackage( _  
      "C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _  
      "\Package Samples\CaptureDataLineage Sample\CaptureDataLineage\CaptureDataLineage.dtsx", _  
      Nothing)  
    Dim pkgVars As Variables = pkg.Variables  
    Dim myVar As Variable = pkg.Variables.Add("myCustomVar", False, "User", "3")  
    Dim pkgVar As Variable  
    For Each pkgVar In pkgVars  
      Console.WriteLine("Variable: {0}, {1}, {2}", pkgVar.Name, _  
        pkgVar.DataType, pkgVar.Value.ToString())  
    Next  
    Console.Read()  
  
  End Sub  
  
End Module  

Exempel på utdata:

Variable: CancelEvent, Int32, 0

Variable: CreationDate, DateTime, 4/18/2003 11:57:00 AM

Variable: CreatorComputerName, String,

Variable: CreatorName, String,

Variable: ExecutionInstanceGUID, String, {237AB5A4-7E59-4FC9-8D61-E8F20363DF25}

Variable: FileName, String, Junk

Variable: InteractiveMode, Boolean, False

Variable: LocaleID, Int32, 1033

Variable: MachineName, String, MYCOMPUTERNAME

Variable: myCustomVar, String, 3

Variable: OfflineMode, Boolean, False

Variable: PackageID, String, {F0D2E396-A6A5-42AE-9467-04CE946A810C}

Variable: PackageName, String, DTSPackage1

Variable: StartTime, DateTime, 1/28/2005 7:55:39 AM

Variable: UserName, String, <domain>\<userid>

Variable: VersionBuild, Int32, 198

Variable: VersionComments, String,

Variable: VersionGUID, String, {90E105B4-B4AF-4263-9CBD-C2050C2D6148}

Variable: VersionMajor, Int32, 1

Variable: VersionMinor, Int32, 0

Observera att alla variabler som ingår i Systemnamnrymden är tillgängliga för paketet. För mer information, se Systemvariabler.

Namespaces

Microsoft služba SSIS (SSIS) tillhandahåller två standardnamnrymder där variabler finns; Användar- och systemnamnrymder. Som standard läggs alla anpassade variabler skapade av utvecklaren till i användarnamnrymden. Systemvariabler finns i Systemnamnrymden. Du kan skapa ytterligare namnrymder utöver användarnamnrymden för att hålla egna variabler, och du kan ändra namnet på användarnamnrymden, men du kan inte lägga till eller ändra variabler i Systemnamnrymden eller tilldela systemvariabler till ett annat namnrymd.

De systemvariabler som finns tillgängliga skiljer sig beroende på behållaretypen. För en lista över systemvariabler som är tillgängliga för paket, containrar, uppgifter och händelsehanterare, se Systemvariabler.

Value

Värdet på en anpassad variabel kan vara en literal eller ett uttryck:

  • Om du vill att variabeln ska innehålla ett bokstavligt värde, sätt värdet på dess Value egenskap.

  • Om du vill att variabeln ska innehålla ett uttryck, så att du kan använda resultaten av uttrycket som dess värde, sätt egenskapen EvaluateAsExpression för variabeln till sann och ge ett uttryck i egenskapen Expression . Vid körning utvärderas uttrycket, och resultatet av uttrycket används som variabelns värde. Till exempel, om uttrycksegenskapen för en variabel är "100 * 2""100 * 2", utvärderas variabeln till värdet 200.

För en variabel kan du inte explicit sätta värdet på dess DataType. Värdet DataType härleds från det initiala värdet som tilldelats variabeln och kan inte ändras efteråt. För mer information om variabeldatatyper, se Integration Services Data Types.

Följande kodexempel skapar en ny variabel, sätter EvaluateAsExpression till sann, tilldelar uttrycket "100 * 2" till variabelns uttrycksegenskap och ger sedan variabelns värde.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
  
namespace Microsoft.SqlServer.Dts.Samples  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      Package pkg = new Package();  
      Variable v100 = pkg.Variables.Add("myVar", false, "", 1);  
      v100.EvaluateAsExpression = true;  
      v100.Expression = "100 * 2";  
      Console.WriteLine("Expression for myVar: {0}",   
        v100.Properties["Expression"].GetValue(v100));  
      Console.WriteLine("Value of myVar: {0}", v100.Value.ToString());  
      Console.Read();  
    }  
  }  
}  
Imports Microsoft.SqlServer.Dts.Runtime  
  
Module Module1  
  
  Sub Main()  
  
    Dim pkg As Package = New Package  
    Dim v100 As Variable = pkg.Variables.Add("myVar", False, "", 1)  
    v100.EvaluateAsExpression = True  
    v100.Expression = "100 * 2"  
    Console.WriteLine("Expression for myVar: {0}", _  
      v100.Properties("Expression").GetValue(v100))  
    Console.WriteLine("Value of myVar: {0}", v100.Value.ToString)  
    Console.Read()  
  
  End Sub  
  
End Module  

Exempel på utdata:

Expression for myVar: 100 * 2

Value of myVar: 200

Uttrycket måste vara ett giltigt uttryck som använder SSIS-uttryckssyntaxen. Literaler är tillåtna i variabeluttryck, utöver de operatorer och funktioner som uttryckssyntaxen tillhandahåller, men uttryck kan inte referera till andra variabler eller kolumner. Mer information finns i Uttryck för Integration Services (SSIS).

Konfigurationsfiler

Om en konfigurationsfil innehåller en anpassad variabel kan variabeln uppdateras vid körning. Detta innebär att när paketet körs ersätts värdet på variabeln som ursprungligen fanns i paketet med ett nytt värde från konfigurationsfilen. Denna ersättningsteknik är användbar när ett paket distribueras till flera servrar som kräver olika variabelvärden. Till exempel kan en variabel ange hur många gånger en Foreach Loop-container upprepar sitt arbetsflöde, eller lista mottagarna som en händelsehanterare skickar e-post till när ett fel uppstår, eller ändra antalet fel som kan uppstå innan paketet misslyckas. Dessa variabler tillhandahålls dynamiskt i konfigurationsfiler för varje miljö. Därför är endast variabler som är lästa/skrivna tillåtna i konfigurationsfiler. Mer information finns i Skapa paketkonfigurationer.