Cláusula OFFSET FETCH (SQL Server Compact)

A cláusula OFFSET-FETCH fornece uma opção para buscar apenas uma janela ou página de resultaods do conjunto de resultados. A cláusula OFFSET-FETCH pode ser usada somente com a cláusula ORDER BY.

Sintaxe

[ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n][<offset_fetch>] ] 

<offset_fetch> ::= {OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }    [FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY]}

Argumentos

  • OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    Especifica o número de linhas a serem ignoradas antes de iniciar o retorno de linhas da expressão de consulta. O argumento da cláusula OFFSET pode ser um inteiro ou uma expressão maior ou igual a zero. Você pode usar tanto ROW quanto ROWs.

  • FETCH { FIRST|NEXT } <rowcount expression> { ROW|ROWS } ONLY
    Especifica o número de linhas a serem retornadas depois do processamento da cláusula OFFSET. O argumento da cláusula OFFSET pode ser um inteiro ou uma expressão maior ou igual a zero. Você pode usar tanto ROW quanto ROWs. Da mesma forma, você pode usar tanto FIRST quanto NEXT.

Limitações no uso de OFFSET-FETCH

  • A cláusula ORDER BY é obrigatória para usar as cláusulas OFFSET e FETCH.

  • A cláusula ORDER BY é obrigatória com FETCH. Você não pode nunca usar ORDER BY … FETCH.

  • TOP não pode ser combinada com OFFSET e FETCH na mesma expressão de consulta.

  • A expressão rowcount de OFFSET/FETCH pode ser um valor aritmético, uma constante ou expressão parametrizada que retornará um valor inteiro. A expressão rowcount não tem suporte para subconsultas escalares.

Exemplo

Os exemplos a seguir demonstram o uso da cláusula OFFSET-FETCH com ORDER BY.

Exemplo 1 Ignora as primeiras 10 linhas de um conjunto de resultados classificado e retorna as linhas restantes.

SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS;

Exemplo 2- Ignora as primeiras 10 linhas de um conjunto de resultados classificado e retorna as cinco próximas linhas.

SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;