استفاده از OFFSET و FETCH

یکی از دستورات پرکاربرد SQL که برای انتخاب بازه خاصی از نتایج مورد استفاده قرار می‌گیرد، عبارت‌های Fetch و Next هستن.

Offset: The OFFSET argument is used to identify the starting point to return rows from a result set .

Fetch: The FETCH argument is used to return a set of number of rows. FETCH can’t be used itself, it is used in conjuction with OFFSET.

مثال زیر فیلدهای نال یک نتیجه را به ترتیب به مقادیر 1 تا n پر می‌کند:

DECLARE @i int=0;
DECLARE @count int=0;
DECLARE @borhanID int=3703;
DECLARE @detailID int;

SELECT @count = COUNT(*) FROM BorhanDetails WHERE BorhanDetails.BorhanHeaderID = @borhanID AND BorhanDetails.RowNo IS NULL

WHILE @i <= @count
BEGIN
  SET @i = @i + 1;

  SELECT @detailID = ID FROM BorhanDetails WHERE BorhanHeaderID = @borhanID AND RowNo IS NULL ORDER BY ID OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
  
  IF (@detailID>0)
  BEGIN
    UPDATE BorhanDetails SET RowNo = @i WHERE BorhanHeaderID = @borhanID AND ID = @detailID
  END
END

! توجه داشته باشید در دیتاهای بزرگ استفاده از این روش سبب کندی می‌شود و به جای آن باید روش دیگری مانند روش زیر استفاده کرد:

select top NTake ... from ... order by ... where orderedByValue > lastRetrievedValue 

روشی دیگر: لینک