【问题标题】:SQL Server equivalent of Postgres querySQL Server 等效于 Postgres 查询
【发布时间】:2016-11-07 04:53:59
【问题描述】:
select column 
from table 
order by row_number() over () 
limit 1000 offset 200;

我在 PostgreSQL 中有上述查询。我想要上面的 SQL Server 等价物。我尝试了以下一种:

select top 1000 offset 200 column 
from table 
order by row_number() over (ORDER BY column ASC) 
limit 1000 offset 200;

但它会引发以下错误。

“17000000”附近的语法不正确。

【问题讨论】:

    标签: sql-server postgresql limit offset


    【解决方案1】:
    SELECT column 
      FROM table 
      ORDER BY Row_Number() Over (Order By column)
      OFFSET 200 ROWS
      FETCH NEXT 1000 ROWS ONLY;
    

    https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx

    请注意,您应该真正使用保证每次都给出相同顺序的 ORDER BY 子句。

    【讨论】:

    • 要在 SQL Server 中使用OFFSET....FETCH,您必须定义一个显式的ORDER BY ....
    【解决方案2】:

    一些数据库不会为偏移量为 200 的 INFORMATION_SCHEMA.COLUMNS 返回任何内容,但我将其放在这里是为了代码工作。

    SELECT t.TABLE_NAME, t.COLUMN_NAME 
        , ROW_NUMBER() over (order by t.COLUMN_NAME asc) as RowNumber
    FROM INFORMATION_SCHEMA.COLUMNS as t
    ORDER BY ROW_NUMBER() over (order by t.COLUMN_NAME asc)
    OFFSET 200 ROWS
    FETCH NEXT 1000 ROWS ONLY
    

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多