Bagikan melalui


Bekerja dengan Variabel Secara Terprogram

Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory

Variabel adalah cara untuk mengatur nilai dan proses kontrol secara dinamis dalam paket, kontainer, tugas, dan penanganan aktivitas. Variabel juga dapat digunakan oleh batasan prioritas untuk mengontrol arah aliran data ke tugas yang berbeda. Variabel memiliki berbagai kegunaan:

  • Memperbarui properti paket pada waktu proses.

  • Isi nilai parameter untuk pernyataan Transact-SQL pada waktu proses.

  • Mengontrol alur perulangan Foreach. Untuk informasi selengkapnya, lihat Menambahkan Enumerasi ke Alur Kontrol.

  • Mengontrol batasan prioritas dengan penggunaannya dalam ekspresi. Batasan prioritas dapat mencakup variabel dalam definisi batasan. Untuk informasi selengkapnya, lihat Menambahkan Ekspresi ke Batasan Prioritas.

  • Mengontrol pengulangan kondisional kontainer For Loop. Untuk informasi selengkapnya, lihat Menambahkan Perulangan ke Alur Kontrol.

  • Ekspresi build yang menyertakan nilai variabel.

  • Anda dapat membuat variabel kustom untuk semua jenis kontainer: paket, kontainer Foreach Loop , kontainer For Loop , kontainer Urutan , TaskHosts, dan penanganan aktivitas. Untuk informasi selengkapnya, lihat Variabel Integration Services (SSIS) dan Menggunakan Variabel dalam Paket.

Cakupan

Setiap kontainer memiliki koleksinya sendiri Variables . Ketika variabel baru dibuat, variabel tersebut berada dalam cakupan kontainer induknya. Karena kontainer paket berada di bagian atas hierarki kontainer, variabel dengan fungsi cakupan paket seperti variabel global, dan terlihat oleh semua kontainer dalam paket. Kumpulan variabel untuk kontainer juga dapat diakses oleh turunan kontainer melalui Variables koleksi, dengan menggunakan nama variabel atau indeks variabel dalam koleksi.

Karena visibilitas variabel tercakup dari atas ke bawah, variabel yang dideklarasikan pada tingkat paket terlihat oleh semua kontainer dalam paket. Oleh karena itu, Variables koleksi pada kontainer mencakup semua variabel milik induknya selain variabelnya sendiri

Sebaliknya, variabel yang terkandung dalam tugas dibatasi dalam cakupan dan visibilitas, dan hanya terlihat oleh tugas.

Jika paket menjalankan paket lain, variabel yang ditentukan dalam cakupan paket panggilan tersedia untuk paket yang disebut. Satu-satunya pengecualian terjadi ketika variabel bernama sama ada dalam paket yang disebut. Ketika tabrakan ini terjadi, nilai variabel dalam paket yang disebut mengambil alih nilai dari paket panggilan. Variabel yang ditentukan dalam cakupan paket yang disebut tidak pernah tersedia kembali ke paket panggilan.

Contoh kode berikut secara terprogram membuat variabel, myCustomVar, pada cakupan paket, dan kemudian melakukan iterasi melalui semua variabel yang terlihat oleh paket, mencetak nama, jenis data, dan nilainya.

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  

Contoh Output:

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

Perhatikan bahwa semua variabel yang terlingkup dalam namespace layanan Sistem tersedia untuk paket. Untuk informasi selengkapnya, lihat Variabel Sistem.

Namaspace

Microsoft SQL Server Integration Services (SSIS) menyediakan dua namespace default tempat variabel berada; Namespace layanan Pengguna dan Sistem . Secara default, variabel kustom apa pun yang dibuat oleh pengembang ditambahkan ke namespace pengguna . Variabel sistem berada di namespace layanan Sistem . Anda dapat membuat namespace tambahan selain namespace layanan Pengguna untuk menyimpan variabel kustom, dan Anda dapat mengubah nama namespace pengguna , tetapi Anda tidak dapat menambahkan atau mengubah variabel di namespace layanan Sistem , atau menetapkan variabel sistem ke namespace yang berbeda.

Variabel sistem yang tersedia berbeda tergantung pada jenis kontainer. Untuk daftar variabel sistem yang tersedia untuk paket, kontainer, tugas, dan penanganan aktivitas, lihat Variabel Sistem.

Nilai

Nilai variabel kustom dapat berupa literal atau ekspresi:

  • Jika Anda ingin variabel berisi nilai harfiah, atur nilai propertinya Value .

  • Jika Anda ingin variabel berisi ekspresi, sehingga Anda dapat menggunakan hasil ekspresi sebagai nilainya, atur EvaluateAsExpression properti variabel ke true, dan berikan ekspresi di Expression properti . Pada waktu proses, ekspresi dievaluasi, dan hasil ekspresi digunakan sebagai nilai variabel. Misalnya, jika properti ekspresi variabel adalah "100 * 2""100 * 2", variabel mengevaluasi ke nilai 200.

Untuk variabel, Anda tidak dapat secara eksplisit mengatur nilai .DataType Nilai DataType disimpulkan dari nilai awal yang ditetapkan ke variabel, dan tidak dapat diubah setelahnya. Untuk informasi selengkapnya tentang jenis data variabel, lihat Jenis Data Integration Services.

Contoh kode berikut membuat variabel baru, diatur EvaluateAsExpression ke true, menetapkan ekspresi "100 * 2" ke properti ekspresi variabel, lalu menghasilkan nilai variabel.

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  

Contoh Output:

Expression for myVar: 100 * 2

Value of myVar: 200

Ekspresi harus berupa ekspresi valid yang menggunakan sintaks ekspresi SSIS. Literal diizinkan dalam ekspresi variabel, selain operator dan fungsi yang disediakan sintaks ekspresi, tetapi ekspresi tidak dapat mereferensikan variabel atau kolom lain. Untuk informasi selengkapnya, lihat Ekspresi Integration Services (SSIS).

File Konfigurasi

Jika file konfigurasi menyertakan variabel kustom, variabel dapat diperbarui pada waktu proses. Apa artinya ini adalah bahwa ketika paket berjalan, nilai variabel yang awalnya dalam paket diganti dengan nilai baru dari file konfigurasi. Teknik penggantian ini berguna ketika paket disebarkan ke beberapa server yang memerlukan nilai variabel yang berbeda. Misalnya, variabel dapat menentukan berapa kali kontainer Foreach Loop mengulangi alur kerjanya, atau mencantumkan penerima tempat penanganan aktivitas mengirim email ke saat kesalahan dimunculkan, atau mengubah jumlah kesalahan yang dapat terjadi sebelum paket gagal. Variabel ini disediakan secara dinamis dalam file konfigurasi untuk setiap lingkungan. Oleh karena itu, hanya variabel yang bersifat baca/tulis yang diizinkan dalam file konfigurasi. Untuk informasi selengkapnya, lihat Membuat Konfigurasi Paket.

Lihat Juga

Variabel Integration Services (SSIS)
Gunakan Variabel dalam Paket