ОК, это полностью недокументировано, и мне пришлось выяснить это методом проб и ошибок, но он устанавливает номер строки для отчетов об ошибках. Например:
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, включая текущую версию SQL Server 2008 R2 с накопительным обновлением 5 (10.50.1753.0).