Monday, August 13, 2012

SQL ROW NUMBER Kullanımı

Wep projelerinde sayfalama ihtiyacı duyulduğunda ya data kontrollerinin sayfalama özelliği aktif edilir (ki bu benim hemen hemen hiç kullanmadığım yöntemdir) ya da bu işlem veritabanında halledirlir. Data kontrollerinin sayfalama özelliği aktif edilse de gerekli verilerin tümü veritabanından çekilerek viewstate'de saklanır ve sayfalama yapılır. Tüm verinin bir anda çekilmesi performansı olumsuz yönde etkileyecektir. 10 ya da 100 satır verinin bir anda çekilmesi gözle görülür bir yavaşlığa sebep olmayabilir fakat bir anda 10 bin ya da 100 bin verinin çekilmesi ziyaretçilerinizin uzun süre boş sayfaya bakmalarına ve sıkılıp sitenizi terk etmelerine sebep olacaktır. Benim kullandığım yöntem veritabanından gerekli satırları sayfa bazında çekmektir. Bunun için sql server bize row_number adında kullanımı çok basit bir fonksiyon sunar. Row_Number fonksiyonu kısaca anlatmak gerekirse bu fonksiyon bize her bir kaydın kaçında satırda olduğunu verir ve Over ifadesi ile birlikte kullanılır.
Ben sayfalama yapacapım veritabanını aşağıdaki şelikde hazırlayıp 23 adet veri girdim.

Burada URUNID int, URUNADI nvarchar(50) türündendir. Şimdi hemen row_number fonksiyonunun kullanımına bir örnek verelim.
?
1

SELECT ROW_NUMBER() OVER(ORDER BY URUNID) AS 'SATIR',* FROM URUNLER
Yukarıdaki kodda ROW_NUMBER() fonksiyonundan sonra OVER ifadesi gelmektedir. Burada sıralamanın hangi alana göre ve nasıl yapılacağını bildiriyoruz. Over ifadesini aşağıdaki şekilde yazarak sıralamayı tersten de yaptırabilirdik.
?
1

SELECT ROW_NUMBER() OVER(ORDER BY URUNID DESC) AS 'SATIR',* FROM URUNLER
Her iki sorgunun ekran görüntüsü aşağıdadır.


Over() ifadesinden sonra kayıtların sıra numarasını verecek alan adını belirtiyoruz. Yukarıdaki resimlerde de görülüdüğü gibi tablomuza 'SATIR' adında yeni bir alan eklenmiş ve kayıtlar burada birer birer artmaktadır. Şimdi sorgumuza biraz eklemeler yaparak sayfalı olarak nasıl sorgulama yapacağımızı görelim.
?
1
2
3
4
5
6

WITH SAYFALIKAYIT AS
(
SELECT ROW_NUMBER() OVER(ORDER BY URUNID) AS 'SATIR',* FROM URUNLER
)

SELECT * FROM SAYFALIKAYIT WHERE SATIR BETWEEN 5 AND 10
Yukarıdaki kodları açıklamak gerekirse WITH deyimi ile SAYFALIKAYIT adında temp bir tablo oluşturuyoruz ve bu tabloda 5. ve 10. sıradaki kayıtlarımızın bulunmasını sağlıyoruz. Bunu da BETWEEN 5 AND 10 komutuyla gerçekleştiriyoruz. Bu sorgudan sonra ekran görüntümüz şöyledir;

Bu ekran görüntüsünde de görüldüğü gibi tüm kayıtlardan sadece 5. ve 10. kayıtlar arasındaki satırlar gelmiştir.


Bu Konu Hakinda daha fazla bilgi icin asagidaki Siteden ulasabilirsiniz.

http://dirlikt.com/7_SQL-ROW-NUMBER--Kullanimi.html

No comments:

Post a Comment