2009-07-25 22 views
7

¿Por qué ROW_NUMBER() no se reconoce como un nombre de función en SQL Server 2008?¿Por qué no se reconoce ROW_NUMBER() en SQL Server 2008?

de que este intento

SELECT 
    ROW_NUMBER() AS Row, Lname 
FROM MEN 
GO 

y me sale este error:

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

+2

@Gold: ¿Alguna vez resolvió esto? –

Respuesta

26

Parece que está usando la sintaxis incorrecta. Aquí hay un ejemplo usando la base de datos AdventureWorks.

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

El error sería "Sintaxis incorrecta cerca de 'ROW_NUMBER', esperado 'OVER'", recién probado en SQL 2005. – gbn

+1

gbn es correcto: el mensaje err es * diferente * cuando se llama a la función ROW_NUMBER sin una cláusula OVER. La excepción indica que el servidor no es la versión correcta. –

4

Compruebe la compatibilidad de su base de datos; asegúrese de que esté configurado en 90 o más.

Parece que hay al menos 2 cosas que están fuera de lugar aquí.

  • La sintaxis en su pregunta es incorrecta, pero no produciría el error de función no reconocida.
  • SQL 2005 y 2008 admiten el ROW_NUMBER OVER() palabras clave/comando. ¿Quizás está utilizando SQL 2008 Management Studio para conectarse a una máquina SQL 2000? Verifique con SELECT @@Version que su base de datos es de hecho una base de datos SQL 2008.
10

La extensión de los otros 2 respuestas ...

he probado el mismo comando en SQL 2005 con 2 bases de datos.

Para ambos niveles de compatibilidad 80 y 90, el error es:

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

sólo puedo generar este error en un cuadro SQL 2000:

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

¿Qué dice SELECT @@version? Me gustaría estar 100% seguro de que está en la versión que espera ...

Mi otro pensamiento es compat nivel 65 que can't be set explicitly in SQL Server 2005 y más parece. Y no tengo ninguna base de datos heredada para evaluar.

+0

gratz en el representante 10k –

0

Si está utilizando SSMS que dice SQL Sever 2008, no significa necesariamente que esté conectado a la base de datos respectiva. Usando @@ versión para verificar la versión del DB al que está conectado porque SQL 2005 usa: [ROW_NUMBER() OVER (ORDER BY ColName)]

Cuestiones relacionadas