2009-07-25 9 views

Odpowiedz

26

pojawiasz się przy użyciu złą składnię. Oto przykład użycia bazy danych AdventureWorks.

select 
    row_number() over(order by Name), 
    Name 
from HumanResources.Department 
+2

Błąd byłby "Niepoprawna składnia w pobliżu" ROW_NUMBER ", oczekiwana" OVER "", właśnie testowana na SQL 2005. – gbn

+1

gbn jest poprawna: wiadomość err jest * inna * gdy funkcja ROW_NUMBER jest wywoływana bez klauzuli OVER. Wyjątek wskazuje, że serwer nie jest poprawną wersją. –

4

Sprawdź kompatybilność bazy danych; upewnij się, że jest ustawiony na 90 lub wyższy.

Wygląda na to, że istnieją co najmniej 2 rzeczy, które nie są tutaj widoczne.

  • Składnia w pytaniu jest niepoprawna, ale nie spowoduje wygenerowania nierozpoznanego błędu funkcji.
  • SQL 2005 i 2008 obsługują słowa kluczowe/polecenie ROW_NUMBER OVER(). Być może używasz SQL 2008 Management Studio do łączenia się z maszyną SQL 2000? Podwójne sprawdzenie z SELECT @@Version, że twój DB jest rzeczywiście SQL 2008 DB.
10

Rozszerzanie pozostałe 2 odpowiedzi ...

Próbowałem dokładnie to samo polecenie w SQL 2005 z 2 baz danych.

Dla obu poziomów kompatybilności 80 i 90, błąd jest:

Msg 1035, Level 15, State 10, Line 2 
Incorrect syntax near 'ROW_NUMBER', expected 'OVER'. 

mogę wygenerować tylko ten błąd na pole SQL 2000:

Msg 195, Level 15, State 10, Line 2 
'ROW_NUMBER' is not a recognized function name. 

Co SELECT @@version powiedzieć? Zrobiłbym 100% pewności, że masz wersję, której oczekujesz ...

Moja druga myśl jest zgodna na poziomie 65, który can't be set explicitly in SQL Server 2005 i powyżej wydaje się. I nie mam żadnych starszych baz danych do testowania.

+0

gratz na 10k powt –

0

Jeśli używasz SSMS z komunikatem SQL Sever 2008, nie musi to oznaczać, że łączysz się z odpowiednią bazą danych. Używanie wersji @@ do sprawdzenia wersji DB, z którą jesteś połączony, ponieważ SQL 2005 używa: [ROW_NUMBER() OVER (ORDER BY ColName)]

Powiązane problemy