2012-01-02 179 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