Copy String Panjang pada SQL Server Management Studio (SSMS)

Soeleman 8 Mei 2017

Copy String Panjang pada SQL Server Management Studio (SSMS)

Berkerja dengan data, kadang kita akan menemui column data yang cukup besar. Seperti text yang cukup panjang atau gambar yang di-Encoding dengan Base64. Data seperti ini kadang akan menyulitkan jikalau kita hendak menggunakannya. Terlebih bila pada saat pembuatan aplikasi atau menelusuri suatu masalah. Kita akan menggunakan tool yang memang dibuat untuk itu. Dalam konteks ini kita bekerja dengan SQL Server, untuk itu kita menggunakan SQL Server Management Studio (SSMS). Seperti apa masalahnya?

Data

Untuk melihat lebih jelasnya kita perlu ada data yang bisa mesimulasikan kondisi yang dimaksud.

JSON

Dalam SQL Server 2016 kita bisa menggunakan data JSON dalam query engine-nya. Dan dalam beberapa kesempatan, kita akan mendapatkan datanya bisa seperti dibawah.

alt text

Table

Atau kita juga bisa mendapatkan data seperti diatas yang dimasukkan kedalam table juga. Contohnya data diatas akan dimasukkan kedalam table dengan schema dibawah.

alt text

Kita bisa menggunakan OPENJSON dikombinasikan dengan sintak INSERT INTO untuk memasukkan kedalam table tersebut.

alt text

Resultset Data

Sekarang kita sudah memiliki data untuk mesimulasi yang mungkin pembaca akan alami.

Kita bisa mengambil data tersebut dari table, seperti dibawah.

< Data Table >

alt text

Juga bisa dari file JSON dengan menggunakan OPENJSON.

< Data JSON >

alt text

Data Korup

Setelah kita salin data dari column itu dengan cara seperti pada gambar diatas. Dan kita coba gunakan data tersebut. Dalam hal ini kita coba jadikan gambar kembali.

Hasilnya data itu tidak lengkap yang membuat sebagian gambar tidak jelas. Juga kita lihat jumlah karakter dan size-nya kecil. Sedangkan kalau pada aplikasinya bisa berjalan sempurna, maksudnya bisa menampilkan gambarnya secara sempurna.

Maka jadilah SSMS kambing hitam, padahal itu tool resmi dari Microsoft.

alt text

Solusi

Tunggu dulu, kalau tidak kenal makanya tidak sayang. Ini memang bagian dari desain dari SSMS. Column untuk menampilkan data di-Grid memang dibatasi. Dengan pertimbangan performa dari SSMS juga, dengan begitu tidak memakan memory yang besar. Bayangkan menampilkan data satu juta row dengan ada column yang besarnya bisa menggunakan memory lebih dari satu MB, bisa hang dahulu. Kalau diperhatikan juga aplikasi serupa SSMS juga akan memiliki desain yang sama.

Jadi bagaimana ya kita bisa meng-copy tanpa perlu repot melalui aplikasi atau meng-export-nya dahulu. Buat test data saja kok.

Sederhana saja, kita rubah saja jadi XML. SQL Server sudah ada dukungan terhadap itu. Contoh kalau kita query, di-column-nya dirubah seperti dibawah.

alt text

Hasilnyapun sama, hanya berwarna biru saja. Kita copy untuk membuktikan cara ini berhasil atau tidaknya.

alt text

Ternyata bisa dan gambarnya terlihat sempurna. Kalau diperhatikan jumlah karakter dan size-nya juga berbeda.

alt text

Apa yang terjadi? katanya SSMS-nya dibuat seefisien ketika menampilkan datanya di-Grid. Penjelasan singkatnya karena Grid-nya menanggani data XML berbeda dengan Text atau Numeric. Untuk XML, Grid akan membuat file dan yang ditampilkan hanya link-nya saja, makanya berwarna biru. Ketika kita copy maka kita menyalin data dari file ke clipboard.

Penutup

Hambatan dari tool seperti SSMS kadang terjadi karena kita tidak mengetahui kelakuan dari tool itu. Juga data yang diolah kadang bukan data yang efisien untuk operasi seperti ini. Selama kita tahu untuk menanggani hal seperti ini, kita bisa lebih mudah mengantisipasinya. Baik pada proses desain, development atau debugging terutama bila ini hasil limbahan aplikasi orang lain.

Oh ya, kodoknya ada ditengah gambar.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.