Download sample code
Pada saat menggunakan OLE DB Source di SSIS, terkadang saya butuh mengambil data menggunakan sub query yang terdapat parameter di dalam sub query-nya. Berikut adalah contoh sederhana query-nya yang isinya mengambil data Employee berdasarkan ModifiedDate. Tentu ini hanya contoh, nggak mungkin kan saya melakukan query dua kali terhadap table yang sama. Hehe.
Akan tetapi, salah satu kelemahan OLE DB Source adalah bahwa OLE DB Source tidak dapat mem-parsing parameter yang terdapat dalam sub query. Jika saya klik tombol Parameters untuk menambahkan parameter ke dalam query tersebut, SSIS akan menampilkan pesan kesalahan tidak dapat mem-parse parameter.
Ada beberapa hal yang dapat kita lakukan untuk menghindari error ini diantaranya adalah menyimpan query tadi di dalam Stored Procedure. Tapi kali ini saya ingin menggunakan variable untuk menyelesaikannya. Biasanya saya akan membuat sebuah variable dengan nama SelectExpression dengan tipe data String dan mengeset property EvaluateAsExpression dengan True. Kemudian klik button
pada property Expression untuk mengisi expression-nya.
Pertama, saya akan menunjukkan bagaimana mengisi expression-nya. Caranya cukup mudah, isi query tadi di bagian expression, dengan ditambah tanda kutip dua (") sebelum dan sesudah query.
Sekarang kita akan mengganti bagian ? yang terdapat pada query dengan value variable User::ModifiedDate. Berhubung tipe data User::ModifiedDate adalah DateTime, kita harus mengkonversinya terlebih dahulu menjadi string.
Yang pertama year-nya:
(DT_WSTR,4) YEAR(@[User::ModifiedDate])
Expression diatas akan mengambil nilai tahun dari variable User::ModifieDate, lalu mengkonversinya menjadi string. Kemudian bagian month-nya:
(DT_WSTR,2) MONTH(@[User::ModifiedDate])
Lalu day-nya:
(DT_WSTR,2) DAY(@[User::ModifiedDate])
Sekarang menggabungkan ketiganya ke dalam expression:
"SELECT [NationalIDNumber] ,[Title] ,[BirthDate] ,[MaritalStatus]
FROM
(
SELECT [NationalIDNumber] ,[Title] ,[BirthDate] ,[MaritalStatus]
FROM [AdventureWorks].[HumanResources].[Employee]
WHERE [ModifiedDate] = '" + (DT_WSTR,4) YEAR(@[User::ModifiedDate])+ "/" + (DT_WSTR,2) MONTH(@[User::ModifiedDate]) + "/" + (DT_WSTR,2) DAY(@[User::ModifiedDate]) + "'
) Employee"
Apabila button Evaluate Expression di-click, hasil expression akan ditampilkan pada bagian Evaluated Value jika expression nya betul .
SELECT [NationalIDNumber] ,[Title] ,[BirthDate] ,[MaritalStatus]
FROM
(
SELECT [NationalIDNumber] ,[Title] ,[BirthDate] ,[MaritalStatus]
FROM [AdventureWorks].[HumanResources].[Employee]
WHERE [ModifiedDate] = '2009/4/7'
) Employee
Setelah selesai, klik OK untuk menutup dialog Expression Builder lalu buka lagi OLE DB Source Editor. Pilih SQL command from variable sebagai data access mode, dan pilih User::SelectExpression pada Variable Name. Di SSIS 2008, value pada variable tadi akan ditampilkan pada bagian Variable Value.
Sebagai developer SSIS, menurut pendapat saya Variable adalah salah satu kekuatan terbesar pada saat bekerja dengan SSIS yang dapat membantu pengerjaan SSIS. Dengan mengetahui bagaimana menggunakannya kita akan sadar bahwa banyak hal yang sebelumnya sulit dikerjakan dengan DTS dapat dengan mudah dikerjakan SSIS.