T-SQL"LineNo"保留字究竟是做什么的?

Lit*_*les 35 t-sql sql-server sql-server-2000 reserved-words

我今天在SQL Server 2000的盒子上写了一个关于表的查询,在查询分析器中编写查询时,我惊讶地发现这个词LineNo被转换为蓝色文本.

根据MSDN文档,它似乎是一个保留字,但我找不到有关它的信息,只是猜测它可能是一个遗留的保留字,它没有任何事情.

我没有问题转义字段名称,但我很好奇 - 有没有人知道T-SQL中的"LineNo"实际上用于什么?

Mic*_*eyn 70

好的,这完全没有记录,我不得不通过反复试验弄明白,但它设置了错误报告的行号.例如:

LINENO 25

SELECT * FROM NON_EXISTENT_TABLE
Run Code Online (Sandbox Code Playgroud)

上面将给出一条错误消息,指示第27行的错误(而不是3,如果您将LINENO行转换为单行注释(例如,通过在其前面添加两个连字符)):

Msg 208, Level 16, State 1, Line 27
Invalid object name 'NON_EXISTENT_TABLE'.
Run Code Online (Sandbox Code Playgroud)

这与编程语言中的类似机制有关,例如Visual C++和Visual C#中的#line预处理程序指令(顺便说一下,这些指令都有记录).

你可能会问,这有什么用?好吧,使用它来帮助SQL代码生成器从一些更高级别(比SQL)语言生成代码和/或执行宏扩展,将生成的代码行绑定到用户代码行.

PS,依靠未记录的功能并不是一个好主意,特别是在处理数据库时.

更新:此解释仍然正确,包括当前版本的SQL Server,在撰写本文时,它是SQL Server 2008 R2累积更新5(10.50.1753.0).

  • 不要让我们搞砸DBA的:-) Msg 208,Level 16,State 1,Line 2792874 (9认同)
  • 这太棒了 - 如果可以的话,我会给你2个更好的赞成"好答案".我想**指出它在查询分析器本身不起作用,但就像存储过程中描述的那样工作.我们必须只使用此功能,而不是与DBA拧紧... (7认同)
  • ......并且仍未记录. (3认同)
  • 我用MS提出了一个错误,我们会看到它有多远.它可能会被拒绝为"按设计"https://connect.microsoft.com/SQLServer/feedback/details/1426523 (2认同)
  • 谢谢您提交此文件,但这不视为错误。一些关键字保留给将来使用或因为它们在内部使用。客户不支持LINENO。 (2认同)