38

我今天在 SQL Server 2000 机器上针对表编写查询,在查询分析器中编写查询时,令我惊讶的是,我注意到单词LineNo被转换为蓝色文本。

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

转义字段名称没有问题,但我很好奇——有谁知道 T-SQL 中的“LineNo”实际上是用来做什么的?

4

2 回答 2

74

好的,这完全没有记录,我必须通过反复试验来解决,但它设置了错误报告的行号。例如:

LINENO 25

SELECT * FROM NON_EXISTENT_TABLE

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

Msg 208, Level 16, State 1, Line 27
Invalid object name 'NON_EXISTENT_TABLE'.

这与编程语言中的类似机制有关,例如 Visual C++ 和 Visual C# 中的#line 预处理器指令(顺便说一下,它们已记录在案)。

你可能会问,这有什么用?好吧,它的一种用途是帮助 SQL 代码生成器从某种更高级别(比 SQL)语言生成代码和/或执行宏扩展,将生成的代码行与用户代码行联系起来。

PS,依赖未记录的功能不是一个好主意,尤其是在处理数据库时。

更新:此解释在 SQL Server 的当前版本(包括在撰写本文时为 SQL Server 2008 R2 Cumulative Update 5 (10.50.1753.0) )之前仍然是正确的。

于 2010-10-29T18:01:48.257 回答
-1

根据您使用它的位置,您始终可以使用[LineNo]. 例如:

select LnNo [LineNo] from OrderLines.
于 2018-07-17T15:22:28.577 回答