
Daha önce MSSQL de paging neden ve nasıl yapılır diye bir içerik yayınlamıştım,okumayanlar ve bilmeyenler için bir kez daha söyleyeyim,database üzerinde paging yaparak verileri çekmek performans açısından sonra derece faydalıdır,zira çok büyük tablolarla çalışan yerlerde gösterilmek istenen kayır sayısı ne olursa olsun,10-20-50-100-200 herneyse bu kadar kayıtı göstermek için biz her seferinde tablomuzda kaç tane kayıt varsa hepsini çekeriz,dolayısı ile bize query olarak dönen structure'un boyutuda olması gerekenden çok fazla olur,sadece 20 kayıt göstereceksiniz diyelim,queryinizden 100 000 kayıt geliyor,bu hem database'i hemde programımızı gereksiz olarak yorar.Bunu engellemek için bu paging yani sayfalama dahada açıkcası sadece göstermek istediğimiz kadar veri çekme işini databasede halletmemiz performans açısından en doğru olanıdır.Dediğim gibi bununla ilgili bir içerik yayınlamıştım bu seferde bunu TSQL kullanarak nasıl yaparız onu paylaşmak istedim,dilerseniz bu kodu çok kullandığını tablolarınız için procedure halinede getirebilirsiniz.
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 1;
SET @PageSize = 10;
WITH AGENDA_QUERY AS --burası çekmek istediğim query,burada agenda_query diye bir nevi set ediyorum..
(
SELECT ROW_NUMBER() OVER(ORDER BY RECORD_DATE, EVENT_ID) AS RowNum
,EVENT_ID
,START_DATE
,FINISH_DATE
,USER_ID
FROM dbo.AGENDA
WHERE USER_ID=1
)
SELECT
*
FROM
AGENDA_QUERY--yukarda set ettiğim queryide burada bir tablo gibi kullanarak pagign yapıyorum..
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
AND @PageNum * @PageSize
ORDER BY
EVENT_ID;
Buraya kadar herşey güzel,ancak SQL de paging'in eksik bir yanı var oda 2.ci bir query olmaksızın iç query'de kaç kayıt olduğunu göremememiz,yukarda "AGENDA_QUERY" diye set ettiğim tablonun gerçekte kaç tane kayıt döndürdünü ancak bir count ile alabiliriz,ben baya bir araştırdım ancak tek seferde almayı bulamadım,eğer bilen yada bulan arkadaşlar olursa burda paylaşırsa sevinirim.
Görüşmek üzere.
Muhammed Mahmut ER
er.mmahmut[at]gmail.com
mahmuter[at]workcube.com



