Хорошо, это полностью недокументировано, и мне пришлось выяснить это методом проб и ошибок, но он устанавливает номер строки для сообщения об ошибках. Например:
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 C ++ и Visual C # (которые, кстати, задокументированы).
Вы спросите, чем это полезно? Что ж, одно его использование, чтобы помочь генераторам кода SQL, которые генерируют код на языке более высокого уровня (чем SQL) и / или выполняют расширение макроса, связывать сгенерированные строки кода со строками кода пользователя.
P.S. Не стоит полагаться на недокументированные функции, особенно при работе с базой данных.
Обновление: это объяснение по-прежнему верно до текущей версии SQL Server включительно, которая на момент написания этой статьи является накопительным обновлением 5 для SQL Server 2008 R2 (10.50.1753.0).
person
Michael Goldshteyn
schedule
29.10.2010