2009-07-25 15 views
7

Pourquoi ROW_NUMBER() n'est pas reconnu en tant que nom de fonction dans SQL Server 2008?Pourquoi ROW_NUMBER() n'est-il pas reconnu dans SQL Server 2008?

J'essaie cette

SELECT 
    ROW_NUMBER() AS Row, Lname 
FROM MEN 
GO 

et je reçois cette erreur:

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

+2

@Gold: avez-vous déjà résolu ce problème? –

Répondre

26

Vous semblez utiliser la syntaxe erronée. Voici un exemple utilisant la base de données AdventureWorks.

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

L'erreur serait "Syntaxe incorrecte près de 'ROW_NUMBER', attendu 'OVER'", juste testé sur SQL 2005. – gbn

+1

gbn est correct: le message d'erreur est * différent * lorsque la fonction ROW_NUMBER est appelée sans clause OVER. L'exception indique que le serveur n'est pas la bonne version. –

4

Vérifiez la compatibilité de votre base de données; Assurez-vous qu'il est réglé sur 90 ou plus.

Il semble qu'il y ait au moins 2 choses qui sont hors sujet ici.

  • La syntaxe de votre question est incorrecte mais ne génère pas l'erreur de fonction non reconnue.
  • SQL 2005 et 2008 prennent en charge les mots-clés ROW_NUMBER OVER(). Peut-être utilisez-vous SQL 2008 Management Studio pour vous connecter à une machine SQL 2000? Vérifiez à nouveau avec SELECT @@Version que votre base de données est bien une base de données SQL 2008.
10

Extension des 2 autres réponses ...

J'ai essayé exactement la même commande sur SQL 2005 avec 2 bases de données.

Pour les deux niveaux de compatibilité 80 et 90, l'erreur est:

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

Je ne peux générer cette erreur sur une boîte SQL 2000:

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

Qu'est-SELECT @@version dire? Je ferais à 100% sûr que vous êtes sur la version que vous attendez ...

Mon autre pensée est le niveau de compat 65 qui can't be set explicitly in SQL Server 2005 et ci-dessus semble. Et je n'ai aucune base de données héritée qui traîne pour tester.

+0

gratz sur le rep 10k –

0

Si vous utilisez SSMS qui indique SQL Server 2008, cela ne signifie pas nécessairement que vous vous connectez à la base de données respective. À l'aide de @@ version pour vérifier la version de la base de données à laquelle vous êtes connecté car SQL 2005 utilise: [ROW_NUMBER() OVER (ORDER BY ColName)]

Questions connexes