OK, ceci n'est absolument pas documenté, et j'ai dû le découvrir par tâtonnement, mais cela définit le numéro de ligne pour le rapport d'erreur. Par exemple :
LINENO 25
SELECT * FROM NON_EXISTENT_TABLE
Vous obtiendrez un message d'erreur indiquant une erreur à la ligne 27 (au lieu de 3, si vous convertissez la ligne LINENO en un commentaire d'une seule ligne (par exemple, en la faisant précéder de deux traits d'union)) :
Msg 208, Level 16, State 1, Line 27
Invalid object name 'NON_EXISTENT_TABLE'.
Ceci est lié à des mécanismes similaires dans les langages de programmation, tels que les directives de préprocesseur #line dans Visual C++ et Visual C# (qui sont documentées, soit dit en passant).
En quoi cela est-il utile ? L'une des utilisations est d'aider les générateurs de code SQL qui génèrent du code à partir d'un langage de plus haut niveau (que SQL) et/ou qui effectuent une expansion macro, à lier les lignes de code générées aux lignes de code de l'utilisateur.
P.S. : Ce n'est pas une bonne idée de s'appuyer sur des fonctionnalités non documentées, en particulier lorsqu'il s'agit d'une base de données.
Mise à jour : cette explication reste correcte jusqu'à la version actuelle de SQL Server, qui, au moment de la rédaction de ce document, est SQL Server 2008 R2 Cumulative Update 5 (10.50.1753.0).