仅关键字-含义

时间:2018-11-13 06:14:32

标签: sql-server tsql

我有一个简单的查询案例:

;WITH TEST_CTE AS
(
    SELECT 1 N

    UNION ALL

    SELECT N + 1 
    FROM TEST_CTE
    WHERE N < 50
)
SELECT N FROM TEST_CTE 
ORDER BY N
OFFSET 10 ROWS 
FETCH NEXT 5 ROWS ONLY

关键字ONLY在这里是什么意思:

  

仅次于5行的FETCH

为什么要在那里放它?

2 个答案:

答案 0 :(得分:2)

如果在使用ORDER BY时检查OFFSET子句的syntax

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

您会看到,如果只需要OFSET行,则无需指定FETCH的行数(剩下的全部都可以得到)。但是,如果要获得特定数量的行,则必须使用ONLY关键字。

我尝试找出在SQL standard中确切定义的位置,因为在许多情况下,这只是标准-看起来好像不需要的东西,但这是标准,人们正在尝试跟着它。因此,来自here

  

由于ISO SQL:2008结果的限制可以如下指定   使用FETCH FIRST子句的示例。

     

选择*仅从前十行中获取

     

CA DATACOM / DB 11,IBM DB2,SAP当前支持此子句   SQL Anywhere,PostgreSQL,EffiProz,H2,HSQLDB 2.0版,Oracle 12c   和Mimer SQL。

     

Microsoft SQL Server 2008和更高版本支持FETCH FIRST,但是它是   被视为ORDER BY子句的一部分。 ORDER BY,OFFSET和   这种用法都需要使用FETCH FIRST子句。

     

选择*从按列排序的DESC偏移量0行获取优先10   仅行

您会看到ONLY关键字似乎是标准定义的一部分。下表是一些实施不符合该标准的语法的表:

enter image description here

因此,对于SQL Server,在使用onlyORDER BY时,必须使用FETCH关键字。这似乎是在遵循标准,所以不要浪费太多时间来担心它。

答案 1 :(得分:1)

Prix用于分页,即;只检索指定的一些行

OFFSET FETCH

因此,在这里按n排序时不会返回前10行,因为它被指定为offset。然后,它将仅返回剩余的5行

SELECT N FROM TEST_CTE ORDER BY N OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY 用于指定所需的行。 如果未指定,则查询将跳过排序结果集中的前10行,并返回其余行。

如果只想偏移行,则仅使用use ONLY关键字。 如果您需要限制返回的行数,请使用OFFSETFETCH

DEMO

相关问题