2012-01-02 3 views
3

Я не знаю, что случилось с этим кодом, это дает мне ошибку на день теперь:SQL 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 Server Компактный 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

Вы правы, я пытаюсь создать разбивку на страницы ... Я пробовал смещение-выборку, но вчера у меня была ошибка, поэтому я подумал, что это не сработает. Я попробую еще раз и сразу сообщит вам. – dpp

+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

2

В SQL Server Compact нет row_number - можете ли вы использовать IDENTITY (не знаете, что вы пытаетесь сделать)?

+0

Сэр, я пытаюсь создать разбиение на страницы, но получил ошибку, после отладки я столкнулся с этим разделом моего запроса, и похоже, что это проблема, поэтому я попытался сделать тест. Я попробую решение marc_s. – dpp

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

Превосходно. Как вы пришли к этому решению @guymella? Я не могу следовать рассуждениям о неравенстве – kuklei