Подтвердить что ты не робот

Что именно делает зарезервированное слово T-SQL "LineNo"?

Я писал запрос к таблице сегодня в окне SQL Server 2000, и, когда я писал запрос в Query Analyzer, к моему удивлению, я заметил, что слово LineNo было преобразовано в синий текст.

Кажется, что это зарезервированное слово в соответствии с документацией MSDN, но я не могу найти никакой информации об этом, просто предположение, что это может быть legacy зарезервированное слово, которое ничего не делает.

У меня нет проблем с экранированием имени поля, но мне любопытно - кто-нибудь знает, что на самом деле используется "LineNo" в T-SQL?

4b9b3361

Ответ 1

ОК, это полностью недокументировано, и я должен был выяснить это через пробную версию и ошибку, но он устанавливает номер строки для сообщения об ошибках. Например:

LINENO 25

SELECT * FROM NON_EXISTENT_TABLE

Вышеприведенное сообщение выдаст сообщение об ошибке, указывающее на ошибку в строке 27 (вместо 3, если вы преобразуете LINENO-строку в один комментарий строки (например, префиксное с двумя дефисами)):

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

Это связано с аналогичными механизмами в языках программирования, такими как директивы препроцессора #line в Visual С++ и Visual С# (которые, кстати, документированы).

Как это полезно, вы можете спросить? Ну, один из них это поможет, чтобы помочь генераторам кода SQL, которые генерируют код с языка более высокого уровня (чем SQL) и/или выполняют расширение макросов, связывают сгенерированные строки кода с кодами пользовательских кодов.

P.S., Не стоит полагаться на недокументированные функции, особенно при работе с базой данных.

Обновление. Это объяснение по-прежнему правильное и включает текущую версию SQL Server, которая на момент написания этой статьи является накопительным обновлением SQL Server 2008 R2 5 (10.50.1753.0).