February 9, 2007
@ 04:12 AM

En son öğrencilerimiz ile kurs sonrası tekrar buluşup sohbet esnasında  "neden ms sql de mySql'deki LIMIT gibi birşey yok.. olması lazım" içerikli konuşmaya kulak kabartmıştım. Tabi bilenler hemen MsSQL 2005 de bu iş için ROW_NUMBER anahtar kelimesinin geldiğini bunla paging - sayfalama - yapılabildiğini söylediler. Ama birçok kişinin hala benzer problemler yaşadığını görüp işitiyoruz. Projemiz hala MsSql 2000 üzerinde ise ne yapabiliriz ? Tabi gecici tablolardan tutun da SP ler yazarak değişik çözümler üretmek mümküm. Ama bir yöntem var ki cidden çok tatlı ve zekice.


Diyelim ki her sayfada 50 eleman göstermek istiyorsunuz. Buna PS dielim ki bu herzaman sabit kalacaktır.Sürekli değişen ise kaçıncı PS den itibaren PS kadar kayıt alacağınız. Buna da OS dersek;


Select Top PS * from TblHede where tblHede.ID not in ( select TOP OS TblHede.ID from TblHede)   gibi bir sorgu işimizi görecektir.



Eğer ilk PS kaydi almak istiyorsak OS = 0, ikinci PS i almak istiyorsak OS = PS * 2 şeklinde ... OS = PS *n şeklinde OS'a değerler vererek sayfalama yaptırabiliriz.(PS in 50 olduğunu düşünürsek, OS ; 0, 50, 100... şeklinde artacaktır)

içerdeki sorgu (select top os ....) bir imleç olarak ya da indeks olarak düşünürsek, OS = 50 dediğimizde; tblHede tablosundaki ilk 50 kayıt dışındaki - not in  sayesinde - kayıtlardan ilk 50 kayıtı al demiş oluyoruz. OS  = 100 dediğimizde de tblHede tablosundaki ilk 100 kayıt dışında kalan kayıtlardan ilk 50 tanesini getir demiş oluruz ki burda PS'in değişmediğine değişenin OS olduğuna dikkat etmemiz gerekir.



Büyük datalarda ne kadar efektif sonuç üretir tartışılır :)


 
Tuesday, August 18, 2009 9:34:06 PM (GTB Daylight Time, UTC+03:00)
Hocam oncellikle tesekkur ederim. cok yararlı bir kod. adam olmayanlardan yardım istemekten kurtardı beni en azından. sorgu ya gelinice soyle bir durum var, order by ile tarih desc ettigmizde hep aynı verileri getiryor. suan bunu kullanıyourm projemde sık olarak ama order by sorununu cozmek gerekiyor. bunu nasıl halledecem acaba. tesekkurler.
Sunday, November 01, 2009 3:18:01 AM (GTB Standard Time, UTC+02:00)
Thanks for article. Everytime like to read you.
Friday, November 27, 2009 5:39:56 AM (GTB Standard Time, UTC+02:00)
The Ugg Australia Brand by the American company Deckers is a popular maker of Ugg Boots and fashion footwear. As we specialize in Australian made Ugg Boots we do not sell Ugg Australia brand boots on this site but due to popular demand we can offer Ugg Australia Brand at our affiliated site: www.e-uggs.com ;UGG Boots Promise:

* 100% authentic sheepskin for unrivalled comfort
* Durable double stitched construction
* Zero cost exchange
* No additional duties or import fees
* Worldwide trackable shipping with full-cover insurance
* Lushiously thick inner fleece for extreme toastiness
* All ugg boots on www.gouggs.com are free shipping 7 days delivery!
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview