Öncelikle tüm kayıtları bir elde edelim .
SELECT * FROM dbo.Products
Daha sonra ise bu verileri bir şekilde ve benim istediğim türde sıralama yapmam gerekiyor.
SELECT * FROM dbo.Products ORDER BY ProductName
Bu işlemide yaptıktan sonra düşünmem gereken şu ki benim sayfalama yapmam için ve bir sayfada kaç kayıt gözükeceğini belirlemem lazım.Bunun için akla ilk gelen id kolonlarına bakmak olacaktır.Fakat unutulmaması gereken eğer silinen veri varsa düzgün sonuç alamayız.Id kolonundaki değerlerin üzerinden yola çıkamam.Onun için de kendi algoritmamı yazmam gerekmektedir.
DECLARE @PageSize INT,
@PageNumber INT,
@FirstRow INT,
@LastRow INT
SELECT @PageSize =
10,
@PageNumber = 2
SELECT @FirstRow = ( @PageNumber - 1) * @PageSize + 1,
@LastRow
= (@PageNumber - 1) * @PageSize + @PageSize ;
Olarak algoritmamı yani bir sayfada kaç kayıt varsa ona göre verileri sayfalara ayırmak için gereken değerlerimi elde ettim.Şimdi yapmam gereken şudur.Eğer ben id kolonundan yola çıkamıyorsam kendim öyle bir kolon oluşturmam gerekir ki elde edilen satırlara otomatik sıra numarası atasın.Bu işlem için de Row_Number() over(Sıralı bir kolon) kodlarından yararlanmam gerekir.
select row_number() over (order by ProductID asc) as SatirNo, ProductID, ProductName
from Products
Olarak sıraları otomatik veren kolonumu da oluşturdum.Şimdi sıra geldi bu sorgudan tablo olarak dönen verilere where filtreleme kodu ile istediğim değerler arasındaki verileri çekmeye.
select * from (select row_number() over (order by ProductID asc) as SatirNo, ProductID, ProductName
from Products)
Products where (SatirNo
between
3 and 15)
Bu işlemi de yaptıktan sonra 3 ile 15 değeri yerine yukarıda bulduğum firstrow ve LastRow değişkenlerini verirsem işlemim tamamlanacaktır.
select * from (select row_number() over (order by ProductID asc) as SatirNo, ProductID, ProductName
from Products)
Products where (SatirNo
between
@FirstRow and @LastRow)
Parça parça anlattıktan sonra tam olarak sorgumuzu bir görelim .
DECLARE @PageSize INT,
@PageNumber INT,
@FirstRow INT,
@LastRow INT
SELECT @PageSize =
10,
@PageNumber = 2
SELECT @FirstRow = ( @PageNumber - 1) * @PageSize + 1,
@LastRow = (@PageNumber - 1) * @PageSize +
@PageSize ;
select * from (select row_number() over (order by ProductID asc) as SatirNo, ProductID, ProductName
from Products)
Products where (SatirNo
between
@FirstRow and @LastRow)
Umarım faydalı olmuştur arkadaşlar.Bir sonraki makalemde görüşmek dileğiyle.
Hiç yorum yok:
Yorum Gönder