2009-07-25 24 views
7

Tại sao ROW_NUMBER() không được nhận dạng dưới dạng tên hàm trong SQL Server 2008?Tại sao ROW_NUMBER() không được nhận dạng trong SQL Server 2008?

tôi cố gắng này

SELECT 
    ROW_NUMBER() AS Row, Lname 
FROM MEN 
GO 

và tôi nhận được lỗi này:

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

+2

@Gold: bạn đã bao giờ giải quyết vấn đề này chưa? –

Trả lời

26

Bạn dường như sử dụng cú pháp sai. Đây là một ví dụ sử dụng cơ sở dữ liệu AdventureWorks.

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

Lỗi sẽ là "Cú pháp sai gần 'ROW_NUMBER', được mong đợi 'OVER'", chỉ được kiểm tra trên SQL 2005. – gbn

+1

gbn là chính xác: thông báo lỗi là * khác nhau * khi hàm ROW_NUMBER được gọi mà không có mệnh đề OVER. Ngoại lệ cho biết rằng máy chủ không phải là phiên bản chính xác. –

4

Kiểm tra tính tương thích của cơ sở dữ liệu của bạn; đảm bảo rằng nó được đặt thành 90 hoặc cao hơn.

Dường như có ít nhất 2 thứ nằm ngoài nhãn hiệu tại đây.

  • Cú pháp trong câu hỏi của bạn không đúng, nhưng sẽ không tạo ra lỗi chức năng không được công nhận.
  • SQL 2005 và 2008 hỗ trợ các từ khóa/lệnh ROW_NUMBER OVER(). Có lẽ bạn đang sử dụng SQL 2008 Management Studio để kết nối với một máy SQL 2000? Kiểm tra kỹ với SELECT @@Version rằng DB của bạn thực sự là một DB SQL 2008.
10

Mở rộng 2 câu trả lời khác ...

tôi đã cố gắng cùng một lệnh chính xác trên SQL 2005 với 2 cơ sở dữ liệu.

Đối với cả hai mức độ tương thích 80 và 90, lỗi này là:

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

Tôi chỉ có thể tạo ra lỗi này trên một hộp SQL 2000:

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

không SELECT @@version nói gì? Tôi đảm bảo 100% chắc chắn rằng bạn đang sử dụng phiên bản mà bạn mong đợi ...

Tôi nghĩ rằng mức độ tương thích 65 là can't be set explicitly in SQL Server 2005 trở lên. Và tôi không có bất kỳ cơ sở dữ liệu di sản nào nằm xung quanh để thử nghiệm.

+0

gratz trên đại diện 10k –

0

Nếu bạn đang sử dụng SSMS cho biết SQL Sever 2008, không nhất thiết có nghĩa là bạn đang kết nối với DB tương ứng. Sử dụng phiên bản @@ để kiểm tra phiên bản của DB bạn đang kết nối vì SQL 2005 sử dụng: [ROW_NUMBER() OVER (ORDER THEO COLName)]

Các vấn đề liên quan