Jumat, 02 Maret 2012

Spesial karakter Bracket "[" versus COALESCE

Misalkan kita mempunyai tabel data Barang di SQL SERVER 2008 R2, katakanlah nama tabel tersebut MST_ITEM, yang mempunyai kolom ITEM_CODE, ITEM_NAME, ITEM_SATUAN. berikut ini list hasil setelah kita lakukan query dengan menggunakan perintah SELECT * FROM MST_ITEM :

ITEM_CODE          ITEM_NAME          ITEM_SATUAN
==============================================
0101001              Pad Cat                       EA
0101002              Oil Filter [Cat]             EA
0101003              Element AS [CAT]      EA

perhatikan karakter "[" "]" yang ada pada kolom ITEM_NAME, inilah inti yang ingin kami sampaikan dari tulisan ini. pada kasus saya, saya mempunyai sebuah Stored Procedure(SP) dengan parameter Filter berdasarkan ITEM_NAME nya, jika user tidak memberikan nilai pada parameter ITEM_NAME maka yang ditampilkan adalah seluruh data (artinya tidak ada data yang difilter), akan tetapi jika ada nilai parameter yang diberikan maka data yang ditampilkan adalah berdasarkan nilai filter yang diberikan. Isi transact_sql di SP tersebut kira-kira seperti di bawah ini,

CREATE PROCEDURE GET_ALL_ITEM_WITH_FILTER
   @ITEM_NAME VARCHAR(100)=NULL
AS
BEGIN
   SELECT * FROM MST_ITEM WHERE ITEM_NAME LIKE '%'+ COALESCE(@ITEM_NAME,
   ITEM_NAME) +'%'
END

Saat SP dijalankan dengan nilai parameter ITEM_NAME Null (artinya tidak ada data yang difilter), data yang tampil hanya item Pad Cat saja,


ITEM_CODE          ITEM_NAME          ITEM_SATUAN
==============================================
0101001              Pad Cat                       EA

sedang ke-2 item lainnya tidak muncul. ketika saya analisa kembali SP saya, disana tidak ada yang mencurigakan, semuanya berjalan dengan normal. akhirnya saya amati data yang ada dan tuduhan pun saya alamatkan ke karakter "[" atau bracket siku yang ada pada Item Name, pada kasus saya kebetulan user mengeluhkan bahwa ada item data yang tidak muncul, dari hasil laporannya ternyata Item namenya tersebut mengandung spesial karakter barcket "[" "]" sementara data yang tampil seluruhnya tidak ada yang mengandung bracket siku pada item namenya. lalu kemudian saya coba untuk menghilangkan karakter "[" dan "]" dari salah satu Item Name yang tidak muncul. Hasilnya, ternyata data tersebut sekarang muncul.

Kesimpulan sementara saya * hal ini karena saya yakin tidak ada yang salah dengan query saya di SP * adalah Bracket siku bermasalah dengan COALESCE, saya tidak tahu apa ada orang lain yang mengalami masalah yang sama dengan saya, saya juga tidak tahu apakah ini bug dari function COALESCE di SQL Server atau karena saya salah didalam memanfaatkan fungsi COALESCE, sebab ketika tulisan ini dibuat saya belum sempat mencarinya di internet.

Setitik masalah yang terpecahkan ini *paling tidak bagi saya* semoga bermanfaat bagi yang membutuhkan, Terimakasih.

Tidak ada komentar: