2009-07-25 3 views
7

Perché lo standard ROW_NUMBER() non è riconosciuto come nome di funzione in SQL Server 2008?Perché ROW_NUMBER() non è riconosciuto in SQL Server 2008?

provo questo

SELECT 
    ROW_NUMBER() AS Row, Lname 
FROM MEN 
GO 

e ottengo questo errore:

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

+2

@Gold: hai mai risolto questo problema? –

risposta

26

Sembra che tu stia usando la sintassi sbagliata. Ecco un esempio che utilizza il database AdventureWorks.

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

L'errore sarebbe "Sintassi non corretta vicino a 'ROW_NUMBER', atteso 'OVER'", appena testato su SQL 2005. – gbn

+1

gbn è corretto: il messaggio err è * diverso * quando la funzione ROW_NUMBER viene chiamata senza una clausola OVER. L'eccezione indica che il server non è la versione corretta. –

4

Verificare la compatibilità del database; assicurati che sia impostato su 90 o superiore.

Sembra che ci siano almeno 2 cose che sono fuori luogo qui.

  • La sintassi nella tua domanda non è corretta, ma non produrrebbe l'errore di funzione non riconosciuto.
  • SQL 2005 e 2008 supportano il comando/parole chiave ROW_NUMBER OVER(). Forse stai utilizzando SQL 2008 Management Studio per connettersi a un computer SQL 2000? Doppio controllo con SELECT @@Version che il DB è effettivamente un DB SQL 2008.
10

Estendere le altre 2 risposte ...

ho provato lo stesso comando esatta su SQL 2005 con 2 basi di dati.

Per entrambi i livelli di compatibilità 80 e 90, l'errore è:

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

posso solo generare questo errore su una scatola di SQL 2000:

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

Cosa SELECT @@version dice? Mi piacerebbe essere sicuro al 100% che tu sia nella versione che ti aspetti ...

Il mio altro pensiero è il livello di compatibilità 65 che can't be set explicitly in SQL Server 2005 e sopra sembra. E non ho database legacy in giro per testare.

+0

gratz sul rep 10k –

0

Se si utilizza SSMS con SQL Sever 2008, non significa necessariamente che ci si connette al rispettivo DB. Usando la versione @@ per verificare la versione del DB a cui sei connesso perché SQL 2005 utilizza: [ROW_NUMBER() OVER (ORDER BY ColName)]