Ответ 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).