Limit pada SQL Server : Advanced 1


Pendahuluan

Melanjutkan pembahasan mengenai penerapan limit pada SQL Server, saya sudah coba gali lebih dalam, dan akan saya coba share ilmu yang sudah saya dapat.

Isi

Pada artikel saya yang sebelumnya, sudah coba saya jelaskan fungsi limit MySql dan cara penerapannya pada SQL Server, bisa diakses pada link berikut: https://andreastjong.wordpress.com/2008/09/20/limit-pada-sql-server/. Contoh yang saya berikan pada artikel sebelumnya hanya dapat digunakan apabila table tersebut hanya memiliki satu buah PK, dengan tipe alphanumeric. Pada kasus lainnya dimana pada satu table terdapat banyak PK, atau PK bukan bertipe alphanumeric, harus ada sedikit modifikasi pada cara yang saya berikan.

1. Table mempunyai 1 PK bertipe alphanumeric

Select TOP OFFSET
From Tablex
Where PK not in
(
Select TOP START PK
From Tablex
)

2. Table Mempunyai banyak PK

Karena function IN dan NOT IN hanya bisa mengecek satu field saja, maka ini menjadi sebuah permasalahan baru. Bagaimana menerapkan query seperti di atas? Salah satu caranya adalah dengan menggunakan funcrion CAST dan +, contoh:

Select TOP OFFSET
From Tablex
Where Cast(PK1 as varchar(10))+Cast(PK2 as varchar(10))
NOT IN
(
Select TOP START Cast(PK1 as varchar(10))+Cast(PK2 as varchar(10))
From Tablex
)

Perbesar ukuran Casting anda sesuai dengan keperluan saja.

3. Table tidak mempunyai PK

Kasus seperti ini sangatlah tidak diharapkan terjadi. Untuk kasus seperti ini, anda dapat menggunakan cara pada kasus2 dengan meng-casting satu persatu field yang ada. Hal ini perlu dilakukan untuk menghindari adanya data yang hilang saat proses terjadi.

Secara keseluruhan dengan menggunakan cara di atas dapat menyelesaikan permasalahan yang anda hadapi, tetapi cara tersebut mempunyai efek samping. Karena adanya perbandingan antara parent query dengan subquery menyebabkan workload yang tinggi. Terlebih lagi apabila anda ingin mencari record yang mendekati akhir row.

To be continued..

7 thoughts on “Limit pada SQL Server : Advanced 1

      • misalkan query nya kayak gini
        select SJS.*, GUDANG.*, CUSTOMER.* from SJS, GUDANG, CUSTOMER
        where SJS.GUDANG=GUDANG.IDGDG AND SJS.CUSTID=CUSTOMER.CUSTID

        cara membuat pagingnya kayak gmn ya? ane baru make sql server, biasa pake MySQL. 😀

      • Asumsi:
        Page Number = x
        Max Row per page = N

        SELECT TOP N *
        FROM SJS, GUDANG, CUSTOMER
        WHERE SJS.GUDANG=GUDANG.IDGDG AND SJS.CUSTID=CUSTOMER.CUSTID
        AND SJS.ID NOT IN (
        SELECT TOP ((x-1) * N) SJS.ID
        FROM SJS, GUDANG, CUSTOMER
        WHERE SJS.GUDANG=GUDANG.IDGDG AND SJS.CUSTID=CUSTOMER.CUSTID
        ORDER BY SJS.ID
        )
        ORDER BY SJS.ID

        Kayak gini maksudnya??

Leave a reply to sigiro Cancel reply