SQL Server Indonesia User Groups Community Menggunakan Table-Valued Parameter di Control Flow SSIS - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

Menggunakan Table-Valued Parameter di Control Flow SSIS

download sample code

Setelah berkenalan dengan Table-Valued Parameter (TVP) tentu saja saya ingin cepat menggunakannya dalam berbagai aspek kehidupan, terutama SSIS yang menjadi sumber mata pencaharian saya.

Ternyata untuk menggunakannya di control flow, kita tidak (atau saya belum menemukan caranya yah?) dapat menggunakan component Execute SQL Task karena pada saat malakukan mapping parameter, tidak ada pilihan untuk datatype object. Cara untuk mengkonsumsinya adalah dengan menggunakan Script Task.

Pada contoh yang dapat di bawah saya akan menunjukkan bagaimana mengeksekusi sp yang telah dibuat pada tulisan sebelumnya dari SSIS.

Yang pertama kali harus dibuat adalah connection ke .net provider untuk sql client.

Kemudian pada control flow tambahkan script task dan isi void Main (untuk c#) atau sub Main (untuk vb) dengan script berikut:

C#

public void Main()

{

//buat datatable yang column-nya sama dengan struktur tvp

DataTable dt = new DataTable();

dt.Columns.Add("name",System.Type.GetType("System.String"));

dt.Columns.Add("quantity",System.Type.GetType("System.Int32"));

dt.Columns.Add("errormessage",System.Type.GetType("System.String"));

 

//isi table dengan nilai yang ingin kita passing ke procedure

dt.Rows.Add("prod1", 100, DBNull.Value);

dt.Rows.Add("prod2", 200, DBNull.Value);

dt.Rows.Add("prod3", 0, DBNull.Value);

 

//connect ke database

SqlConnection connection = new SqlConnection(Dts.Connections["localhost.Research"].ConnectionString);

connection.Open();

 

//execute InsertProduct dengan parameter dt

SqlCommand command = new SqlCommand("InsertProduct", connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.AddWithValue("@product", dt);

command.ExecuteNonQuery();

 

//tutup koneksi

connection.Close();

 

Dts.TaskResult = (int)ScriptResults.Success;

}

 

VB

    Public Sub Main()

        '

        ' Add your code here

'

'buat datatable yang column-nya sama dengan struktur tvp

Dim dt As New DataTable()

dt.Columns.Add("name", System.Type.GetType("System.String"))

dt.Columns.Add("quantity", System.Type.GetType("System.Int32"))

dt.Columns.Add("errormessage", System.Type.GetType("System.String"))

 

'isi table dengan nilai yang ingin kita passing ke procedure

dt.Rows.Add("prod1", 100, DBNull.Value)

dt.Rows.Add("prod2", 200, DBNull.Value)

dt.Rows.Add("prod3", 0, DBNull.Value)

 

'connect ke database

Dim connection As New SqlConnection(Dts.Connections("localhost.Research").ConnectionString)

connection.Open()

 

'execute InsertProduct dengan parameter dt

Dim command As New SqlCommand("InsertProduct", connection)

command.CommandType = CommandType.StoredProcedure

command.Parameters.AddWithValue("@product", dt)

command.ExecuteNonQuery()

 

'tutup koneksi

connection.Close()

 

Dts.TaskResult = ScriptResults.Success

    End Sub

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems