Sorgu Sonucunda Gelen Kayıtları Limitlemek ve Sayfalamak(OFFSET ve FETCH SQL Server Paging)

İstemci(Client)’ye sorgu sonucunun tamamını göndermek istemiyorsanız OFFSET ve FETCH yardımıyla sorgu sonucunun hangi satırından başlayıp kaç tane satırını döndüreceğini belirleyebilirsiniz.

 

Bir örnek yaparak çok daha kolay anlaşılabileceğini düşünüyorum. Aşağıdaki kod bloğunu inceleyelim.

 

İlk sorguda AdventureWorks2014Yeni veritabanındaki tüm kolanları City’ye göre sıralayarak select ediyoruz.

 

İkinci sorguda aynı sorgunun ilk 5 kaydı haricindeki diğer tüm kayıtları getiriyoruz.

 

Üçüncü sorguda da ilk kayıttan başlayarak yalnızca 10 kaydı getiriyoruz. Sorgu sonucunun her seferinde aynı gelmesi için sorgunun sonuna OPTION(MAXDOP 1) hint’ini koyuyoruz. Eğer koymazsak ve sorguda parallelism olursa sıralama her seferinde farklı olabiliyor.

 

SELECT *  FROM [AdventureWorks2014Yeni].[dbo].[Address]
Order By City ASC
OPTION(MAXDOP 1)

 

SELECT *  FROM [AdventureWorks2014Yeni].[dbo].[Address]
Order By City ASC
OFFSET 5 ROWS
OPTION(MAXDOP 1);

 

 

SELECT *  FROM [AdventureWorks2014Yeni].[dbo].[Address]
Order By City ASC 
OFFSET 40 ROWS
FETCH NEXT 10 ROWS ONLY
OPTION(MAXDOP 1);

 

 

Kod içinde bir düzenlemeyle sayfalama yapmak için bu özellik kullanılabiliyor. Mesela aşağıdaki kod’da sayfa başına satır sayısı 10 iken 5.sayfayı getiriyoruz.

DECLARE @SayfaBasinaSatir INT = 10, @SayfaNumarasi INT = 5

SELECT *  FROM [AdventureWorks2014Yeni].[dbo].[Address]
Order By City ASC 
OFFSET @SayfaBasinaSatir * (@SayfaNumarasi-1) ROWS
FETCH NEXT @SayfaBasinaSatir ROWS ONLY
OPTION(MAXDOP 1);

 

 

Loading

Leave Your Comment