【问题标题】:SQL Server CE - ROW_NUMBERSQL Server CE - ROW_NUMBER
【发布时间】:2012-01-31 18:22:58
【问题描述】:

我不知道这段代码有什么问题,它给了我一天的错误:

select row_number() over(order by s.title) as rowNumber, s.id 
from story as s

表定义:

id       bigint
title    nvarchar(100)
content  ntext

数据库:SQL Server Compact 4.0.8482.1

错误:

解析查询时出错。 [令牌行号=1,令牌行偏移量=22,错误令牌=结束]

到目前为止我做了什么:

我在 SO 中搜索过同样的问题,但解决方案不适用于我的,我非常需要 row_number 功能。

【问题讨论】:

    标签: sql-server-ce


    【解决方案1】:

    正如 ErikEJ 已经提到的 - ROW_NUMBER 在 SQL Server Compact Edition 中根本不存在 - 甚至在最新的 4.0 版本中也不存在。

    但是,如果您尝试使用 ROW_NUMBER 对数据进行分页,SQL Server Compact Edition 4.0 确实支持通过 SQL Server 2012 中出现的新关键字进行服务器端分页 - 请参阅 this blog post here 了解所有细节。

    你应该能够写出类似的东西:

    SELECT (columns)
    FROM Story s
    ORDER BY Title
    OFFSET 20 ROWS 
    FETCH NEXT 10 ROWS ONLY;
    

    【讨论】:

    • 你说得对,我正在尝试创建分页...我已经尝试过 offset-fetch 但我昨天遇到了一个错误,所以我认为它不起作用。我会再试一次并立即通知您。
    • 有效!我使用了这个offset @0 rows fetch next @1 rows only 而不是我的旧查询offset (@0- 1) * @1 rows fetch next @1 rows only,我在我的应用程序中计算了@0。似乎 SQL CE 中也不允许进行计算,是吗? SQL CE 是否将(@0- 1) * @1 视为子查询?
    【解决方案2】:

    SQL Server CE 没有 row_number。它也不能做标量子查询,也可以用来获取行号。

    但是您可以进行不等式连接...计算连接数。

    这会给你一个行号。

    select count(r.id) as Row_Number, s.id 
    from story as s
        inner join story as r
            on s.id >= r.id
    group by s.id
    

    【讨论】:

    • 好极了。你是怎么得出这个解决方案的@guymella?我无法遵循不等式加入的推理
    【解决方案3】:

    SQL Server Compact 中没有 row_number - 您可以使用 IDENTITY(不确定您要做什么)吗?

    【讨论】:

    • 先生,我正在尝试创建分页但出现错误,在调试时我遇到了查询的这一部分,似乎是问题所在,所以我尝试进行测试。我会试试 marc_s 的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多