2010-10-29 29 views
32

Tôi đã viết một truy vấn chống lại một bảng ngày hôm nay trên một hộp SQL Server 2000, và trong khi viết truy vấn trong phân tích truy vấn, ngạc nhiên của tôi, tôi nhận thấy từ LineNo được chuyển thành văn bản màu xanh lam.Từ dành riêng cho "LineNo" T-SQL chính xác là gì?

Có vẻ như là reserved word theo tài liệu MSDN, nhưng tôi không thể tìm thấy thông tin về nó, chỉ cần suy đoán rằng đó có thể là một từ dành riêng kế thừa không làm bất kỳ thứ gì.

Tôi không có vấn đề gì khi thoát tên trường, nhưng tôi tò mò - có ai biết "LineNo" trong T-SQL thực sự được sử dụng không?

Trả lời

63

OK, điều này là hoàn toàn không có giấy tờ, và tôi phải tính toán nó qua thử và sai, nhưng nó đặt số dòng để báo cáo lỗi. Ví dụ:

LINENO 25 

SELECT * FROM NON_EXISTENT_TABLE 

trên sẽ cung cấp cho bạn một thông báo lỗi, cho thấy có lỗi tại dòng 27 (thay vì 3, nếu bạn chuyển đổi các dòng LINENO để bình luận dòng đơn (ví dụ, bằng cách đặt trước nó với hai dấu gạch nối)):

Msg 208, Level 16, State 1, Line 27 
Invalid object name 'NON_EXISTENT_TABLE'. 

này liên quan đến cơ chế tương tự trong các ngôn ngữ lập trình, chẳng hạn như các chỉ thị tiền xử lý #line trong Visual C++ và Visual C# (được ghi nhận, bằng cách này).

Điều này hữu ích như thế nào, bạn có thể yêu cầu? Vâng, một cách sử dụng nó để giúp các trình tạo mã SQL tạo mã từ một số ngôn ngữ cấp cao hơn (và SQL) và/hoặc thực hiện mở rộng macro, buộc các dòng mã được tạo ra cho các dòng mã người dùng.

Tái bút: Không nên dựa vào các tính năng không có giấy tờ, đặc biệt là khi xử lý cơ sở dữ liệu.

Cập nhật: Giải thích này vẫn đúng cho tới và bao gồm phiên bản hiện tại của SQL Server, tại thời điểm viết bài này là Cập Nhật tích lũy SQL Server 2008 R2 5 (10.50.1753.0).

+7

Thật tuyệt vời - tôi sẽ cung cấp cho bạn thêm 2 phiếu bầu cho "Câu trả lời hay" nếu tôi có thể. Tôi ** sẽ ** muốn chỉ ra rằng nó không hoạt động trong Query Analyzer, nhưng hoạt động giống như được mô tả trong một thủ tục lưu sẵn. Chúng ta phải sử dụng tính năng này chỉ cho tốt, và không phải cho screwing với DBAs ... – LittleBobbyTables

+8

Không hãy vít với DBA's :-) Msg 208, Cấp 16, State 1, Line 2792874 –

+3

Vẫn hoạt động trong SQL 2012 :-) – Bridge