2009-07-25 170 views
7

爲什麼ROW_NUMBER()在SQL Server 2008中不被識別爲函數名?爲什麼ROW_NUMBER()在SQL Server 2008中不被識別?

我試試這個

SELECT 
    ROW_NUMBER() AS Row, Lname 
FROM MEN 
GO 

,我得到這個錯誤:

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

+2

@Gold:你有沒有解決這個問題? – 2009-08-03 14:23:40

回答

26

你似乎是使用了錯誤的語法。這裏是一個使用AdventureWorks數據庫的例子。

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

錯誤將會是「ROW_NUMBER附近的語法錯誤」,預計'OVER'「,僅在SQL 2005上測試過。 – gbn 2009-07-25 18:32:15

+1

gbn正確:當ROW_NUMBER函數在沒有OVER子句的情況下調用時,錯誤消息是*不同*。異常表示服務器不是正確的版本。 – 2009-07-25 20:35:34

4

檢查數據庫的兼容性;確保它設置爲90或更高。

看起來至少有兩件事情在這裏不重要。

  • 您問題中的語法不正確,但不會產生無法識別的函數錯誤。
  • SQL 2005和2008確實支持ROW_NUMBER OVER()關鍵字/命令。也許你在使用SQL 2008 Management Studio連接到SQL 2000機器嗎?請仔細檢查SELECT @@Version您的數據庫確實是SQL 2008數據庫。
10

擴展其他2個答案...

我試過在2005年SQL完全相同的命令2個數據庫。

對於這兩個兼容級別80和90,錯誤是:

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

我只能在SQL 2000箱產生這個錯誤:

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

是什麼SELECT @@version說什麼?我會100%確定你是在你期望的版本...

我的另一個想法是compat 65級,其中can't be set explicitly in SQL Server 2005和以上似乎。我沒有任何遺留數據庫可供測試。

0

如果您使用的是SQL Sever 2008的SSMS,並不一定表示您連接到相應的數據庫。使用@@ version來檢查你連接的數據庫的版本,因爲SQL 2005使用:[ROW_NUMBER()OVER(ORDER BY ColName)]

相關問題