为什么在SQL Server 2008中无法识别ROW_NUMBER()?

时间:2009-07-25 14:17:00

标签: sql-server tsql 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'不是公认的   功能名称。

4 个答案:

答案 0 :(得分:27)

您似乎使用了错误的语法。以下是使用AdventureWorks数据库的示例。

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

答案 1 :(得分:10)

扩展其他2个答案......

我在SQL 2005上用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说什么?我百分百肯定你的版本是你期望的......

我的另一个想法是compat等级65 can't be set explicitly in SQL Server 2005及以上看起来。我没有任何遗留数据库可供测试。

答案 2 :(得分:4)

检查数据库兼容性;确保它设置为90或更高。

看来这里至少有两件事情不合时宜。

  • 您的问题中的语法不正确,但不会产生无法识别的函数错误。
  • SQL 2005和2008确实支持ROW_NUMBER OVER() keywords /命令。也许您使用SQL 2008 Management Studio连接到SQL 2000计算机?仔细检查SELECT @@Version您的数据库确实是SQL 2008数据库。

答案 3 :(得分:0)

如果您正在使用SQL Sever 2008的SSMS,那么这并不意味着您将连接到相应的数据库。使用@@ version检查您连接的数据库的版本,因为SQL 2005使用:[ROW_NUMBER()OVER(ORDER BY ColName)]