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

时间:2010-10-29 17:50:21

标签: sql-server tsql sql-server-2000 reserved-words

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

根据MSDN文档,它似乎是reserved word,但我找不到有关它的信息,只是猜测它可能是一个遗留的保留字,而不是任何东西

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

2 个答案:

答案 0 :(得分:68)

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

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)语言生成代码和/或执行宏扩展,将生成的代码行绑定到用户代码行。

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

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

答案 1 :(得分:0)

根据使用位置的不同,您始终可以使用[LineNo]。例如:

select LnNo [LineNo] from OrderLines.