2012-01-02 99 views
3

我不知道什么是错的这个代码,它给我的错误,现在一天:的SQL Server CE - ROW_NUMBER

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

表定义:

id  bigint 
title nvarchar(100) 
content ntext 

数据库:SQL服务器紧凑型4.0.8482.1

错误:

There was an error parsing the query. [ Token line number = 1,Token line offset = 22,Token in error = over ]

我是怎么回事:

我已经在SO搜索了相同的问题,但解决方案不适用于我的,我需要row_number函数如此糟糕。

回答

6

正如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; 
+0

你说得对,我正在尝试创建分页...我尝试了offset-fetch,但是昨天我得到了一个错误,所以我认为它不起作用。我会再试一次,马上通知你。 – dpp 2012-01-03 02:30:01

+0

它的工作原理!我用这个'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'视为子查询? – dpp 2012-01-03 02:54:10

2

在SQL Server Compact中没有row_number - 你可以使用IDENTITY(不知道你在做什么)?

+0

先生,我试图创建分页,但得到一个错误,在调试时我遇到了这个部分的查询,好像它是问题,所以我试图做一个测试。我会尝试marc_s的解决方案。 – dpp 2012-01-03 02:31:30

2

的SQL Server CE没有ROW_NUMBER。它也不能做标量子查询,也可以用来获取rownumber。

但你可以做不平等加入...计数连接。

这会给你一个rownumber。

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 
+0

棒极了。你是怎么来到这个解决方案@guymella的?我无法跟随关于不平等加入的推理 – kuklei 2018-02-17 17:10:18