SQL Server Indonesia User Groups Community April 2009 - Posts - 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

April 2009 - Posts

  • Kenapa Jumlah Row Hasil Export/Import Data Berbeda

    Pagi ini saya melakukan export/import data menggunakan SSIS dari SQL Server 2000 ke SQL Server 2005. Setelah prosesnya selesai, saya mengecek hasilnya dengan menggunakan perintah sp_spaceused di kedua database. Setelah di-cek, ternyata hasilnya berbeda. Jumlah row yang terdapat di table 2005 lebih banyak dibandingkan dengan di 2000. Kemudian saya melakukan ricek dengan menggunakan perintah select count(1) ke kedua table dan mendapati fakta bahwa hasilnya ternyata sama. Kenapa hal ini bisa terjadi yah?

    Setelah membuka Books Online saya mendapati jawabannya:

    In earlier versions of SQL Server, the values for the table and index row counts and page counts can become incorrect. Databases that were created on versions prior to SQL Server 2005 may contain incorrect counts. Therefore, we recommend running DBCC UPDATEUSAGE after upgrading to SQL Server 2005 to correct any invalid counts.

    Yup, ternyata di SQL Server 2000 hasil sp_spaceused ini bisa ngaco. dan untuk melakukan update statistic table-nya kita dapat menggunakan DBCC UPDATEUSAGE.

    Posted Apr 18 2009, 01:51 AM by si_hendrik with no comments
    Filed under:
  • A Blast From The Past

    Minggu lalu saya ikutan quiz Seperti Dosen JTK siapakah kamu? di Facebook dan hasilnya:

    Bpk Dewa Gede Parta
    Dosen yang memiliki logika pemikiran matematika diatas rata-rata. Dosen yang memberikan pembelajaran tidak secara sequensial, tetapi bertujuan agar mahasiswa mendapatkan hasilnya setelah mahasiswa tersebut dibuat pusing terlebih dahulu. Bpk Dosen ini memiliki prinsip "sekali jebred", yaitu apabila suatu masalah dapat dimodelkan sebagai model matematika, mengapa tidak dapat digunakan rumus yang hanya satu kali pencet enter saja.

    JTK adalah singkatan dari Jurusan Teknik Komputer, jurusan yang saya ambil pada saat mengambil kuliah diploma di Politeknik Negeri Bandung dan Pak Dewa adalah dosen sekaligus Ketua Jurusan pada saat itu. Saya ingat pada bulan-bulan pertama beliau mengajar saya dan teman-teman selalu bingung dengan metode pembelajarannya. Yang beliau lakukan hanya masuk ke kelas, lalu bercerita panjang lebar tentang banyak hal dan sedikit sekali menyinggung soal mata kuliah.

    Di akhir semester saya mulai memahami gaya mengajarnya yang unik itu adalah agar kita tidak terbiasa menggantungkan pengetahuan dari para dosen, tetapi belajar untuk mandiri dalam mempelajari setiap hal. Selain itu juga beliau selalu menekankan pentingnya algoritma pada saat kita coding, terbiasa menulis algoritma di kertas, men-trace-nya di kertas juga, untuk kemudian apabila algoritma tadi telah selesai dan menghasilkan output yang diinginkan barulah menggunakan komputer untuk mengetes hasilnya.

    Pada saat mengerjakan tugas akhir saya mengambil judul "Pengenalan dan Pemeriksaan Tanda Tangan dengan Menggunakan Neural Network" dan meminta beliau untuk menjadi dosen pembimbing. Setiap kali bimbingan saya nggak pernah diajari soal neural network ataupun image processing. Dari beliau, saya belajar bahwa dalam menghadapi sebuah persoalan, pertama-tama saya harus mengetahui dulu apa sih persoalan yang saya hadapi. Apabila sudah mengetahuinya, hal selanjutnya yang harus dilakukan adalah mencari cara paling tepat untuk menyelesaikannya. Jika cara yang akan dilakukan salah, kemungkinan untuk menyelesaikannya menjadi kecil. Setelah selesai barulah mendevelop (coding) solusi untuk menyelesaikannya, dan coding adalah bagian paling mudah dalam proses penyelesaian masalah. Dan itulah yang saya lakukan untuk menyelesaikan tugas akhir saya tadi, dan walaupun saya menyelesaikannya dalam waktu yang lebih lama (lewat dua bulan) dari teman-teman kuliah saya yang lain, tapi saya merasa senang sekali melakukannya.

    Beberapa waktu lalu saya sering membantu manager saya mewawancarai orang untuk proses penerimaan employee di kantor, dan tugas saya adalah memberikan soal-soal teknikal sederhana seperti algoritma dan database fundamental. Saya terkejut dengan banyaknya calon employee yang tidak mengetahui bagaimana caranya membuat algoritma ataupun men-trace-nya. Yang lebih buruk adalah mereka tidak memahami soal yang diberikan sehingga kebanyakan isi algoritma-nya adalah if-then-else.

    Belakangan ini di milis/forum yang saya ikuti, saya sering menemui beberapa member yang selalu menginginkan jawaban yang paling benar dan pasti dari pertanyaan yang diajukannya dan sepertinya malas untuk membuka-buka Books Online atau MSDN. Yang saya tahu, milis dan forum digunakan untuk membantu saya mengetahui cara untuk menyelesaikan masalah, bukan untuk menyelesaikan masalah. Saya selalu berpikir apabila ada orang yang menggunakan milis untuk menyelesaikan masalahnya, untuk apa dia bekerja, dan untuk apa bos nya menggaji orang tersebut untuk bekerja di perusahaannya? Kenapa nggak mengganti orang tersebut dengan orang-orang di milis yang dapat menyelesaikan masalahnya? Terlebih dengan adanya resesi global sekarang ini sebuah perusahaan biasanya dituntut untuk melakukan efesiensi, dan itu biasanya berarti pengurangan employee.

    Kedua hal diatas mengingatkan saya pada Pak Dewa dan cara mengajar beliau. Saya merasa sangat beruntung bertemu dan belajar dari beliau dan nggak pernah merasa menyesal karena dulu saya nggak bisa masuk PTN atau hanya memiliki ijazah diploma.

  • Hal Buruk Terjadi di SQLServer-Indo

    Kemarin sore, seperti biasa sebelum pulang kantor saya menyempatkan diri untuk membuka situs SQLServer-Indo. Cukup surprise waktu buka halaman depan secara sekilas dan melihat banyaknya member yang sedang online. Ada tiga page member dengan 15 member di setiap page-nya, itu berarti ada sekitar 45 member yang online. Wow!

    image

    Tapi rasa surprise itu gak berlangsung lama demi melihat nama-nama member yang sedang online. Seperti yang bisa dilihat pada gambar diatas, nama-namanya aneh dan kebanyakan seperti hal-hal yang berhubungan dengan dunia kesehatan. Saya pun segera tersadar kalau hal buruk sedang terjadi, bergegas saya menghubungi bapak-bapak admin dan melaporkan kejadian ini, kemudian pulang ke rumah.

    Tadi sore pas buka e-mail saya mendapat jawaban bahwa hal ini telah diperbaiki. Supaya tidak terjadi lagi, proses registrasi member kini memerlukan approval dan hanya yang registrasinya di-approve lah yang dapat menjadi member. Semoga kejadian ini tidak terjadi lagi dan dapat kita ambil pelajaran untuk lebih berhati-hati.

    Cukup sedih demi mengetahui sebuah situs yang sedianya disediakan untuk belajar dan berbagi bagi community menjadi korban keisengan segelintir orang. Saya ingat beberapa waktu lalu sempat berbicara dengan Pak Kiki soal proses moderasi di SQLServer-Indo. Waktu itu saya sempat mengajukan usulan agar tidak ada moderasi untuk blog maupun forum agar rekan-rekan yang memiliki masalah dapat dengan cepat mendapatkan solusi. Dengan kejadian ini saya jadi mengerti alasan beliau melakukan moderasi.

    Alih-alih iseng, alangkah baiknya jika orang-orang tersebut ikut aktif membantu mengembangkan situs ini menjadi lebih maju. Untuk member yang lain, mudah-mudahan tetap semangat dan ikut membantu mengembangkan situs demi kemajuan kita bersama.

    Cheers.

  • 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.

    Posted Apr 08 2009, 07:47 AM by si_hendrik with no comments
    Filed under:
  • Mencari Data yang Sama dari Dua Table

    Jika pada posting sebelumnya saya mencari selisih data pada dua table, maka sekarang saya ingin menunjukkan bagaimana mencari data yang sama dari dua table. Untuk mendapatkannya saya menggunakan kebalikan dari Except, yaitu Intersect. Syntax-nya hampir sama dengan Except, sebagai berikut:

    image

    Sebagai contoh saya akan menggunakan dua buah table @tab1 dan @tab2

    image

    image

    Lalu saya mencari data yang sama dengan menggunakan Intersect

    image

    Query tersebut akan menampilkan data yang terdapat di @tab1 dan @tab2

    image

  • Mencari Selisih Data dari Dua Table

    Dulu saya sering mengalami kesulitan untuk membandingkan data yang terdapat pada dua buah table dengan struktur yang sama. Setelah menggunakan beberapa cara yang kurang praktis, saya mendapati cara termudah untuk membandingkan dan mendapatkan selisih datanya.

    Ternyata SQL Server punya sebuah T-SQL statement bernama except yang akan mencari selisih data dari dua query. Syntax nya sendiri cukup sederhana, sebagai berikut:

    image

    Mari kita lihat contoh berikut, pertama saya membuat sebuah table dengan nama @tab1 dan mengisi datanya.

    image

    image

    Kemudian saya membuat table @tab2 dan mengisinya dengan data berbeda.

    image

    image

    Kemudian saya gunakan except mencari selisih data antara @tab1 dan @tab2

    image

    Query tersebut akan menampilkan data yang terdapat di @tab1 dan tidak terdapat di @tab2

    image

    Untuk mencari data yang terdapat di @tab2 dan tidak terdapat di @tab1, tinggal ganti query-nya sebagai berikut

    image

    image

  • My First E-Book is Out Now

    Setelah menunggu beberapa waktu akhirnya e-book pertama saya diluncurkan juga (diluncurkan, kayak penulis terkenal aja, hehe). Sebuah e-book yang merupakan hasil kerja sama antara Pak Kasim Wirama, Yudhi dan saya dan menjadi e-book pertama SQLServer-Indo. Semoga bukan yang terakhir.
    E-book ini bercerita tentang bagaimana membuat sebuah solusi Business Intelligence dengan menggunakan SQL Server 2008. Walaupun isinya masih sangat sederhana, tapi kami berharap dapat menjadi referensi untuk Anda yang ingin belajar membuat solusi BI.
    Untuk mulai mengunduh e-book silakan kesini, dan untuk mengunduh contoh database-nya silakan kesini.
More Posts
Powered by Community Server (Commercial Edition), by Telligent Systems