SQL Server Indonesia User Groups Community Mem-Parsing Parameter dalam Sub Query di OLE DB Source - 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

Mem-Parsing Parameter dalam Sub Query di OLE DB Source

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.

image

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.

image

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 image pada property Expression untuk mengisi expression-nya.

image

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.

 image

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.

image

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.

Published Apr 08 2009, 07:47 AM by si_hendrik
Filed under:

Comments

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