39 votes

Que fait exactement le mot réservé T-SQL "LineNo" ?

J'écrivais aujourd'hui une requête sur une table sur une machine SQL Server 2000, et pendant que j'écrivais la requête dans Query Analyzer, j'ai remarqué à ma grande surprise que le mot LineNo a été converti en texte bleu.

Il semble qu'il s'agisse d'un mot réservé selon la documentation MSDN, mais je ne trouve aucune information à ce sujet, seulement des spéculations sur le fait qu'il pourrait s'agir d'un mot réservé hérité qui n'est pas utilisé dans le cadre d'un projet de recherche. faire n'importe quoi.

Je n'ai aucun problème à échapper le nom du champ, mais je suis curieux - quelqu'un sait-il à quoi sert réellement "LineNo" dans T-SQL ?

75voto

Michael Goldshteyn Points 24679

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).

7 votes

C'est fantastique - si je le pouvais, je vous donnerais deux votes supplémentaires pour une "belle réponse". I sería Je tiens à souligner qu'il ne fonctionne pas dans Query Analyzer lui-même, mais qu'il fonctionne comme décrit dans une procédure stockée. Nous ne devons utiliser cette fonctionnalité que pour le bien, et non pour tromper les administrateurs de bases de données...

12 votes

Non, faisons la nique aux DBA :-) Msg 208, Niveau 16, État 1, Ligne 2792874

3 votes

... et est toujours sans papiers.

0voto

Sélectionner [LineNo] dans le tableau

au lieu de Select LineNo from Table

-2voto

Selon l'endroit où vous l'utilisez, vous pouvez toujours utiliser [LineNo] . Par exemple :

select LnNo [LineNo] from OrderLines.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X