T-SQL“LineNo”保留字究竟有啥作用?

Posted

技术标签:

【中文标题】T-SQL“LineNo”保留字究竟有啥作用?【英文标题】:What exactly does the T-SQL "LineNo" reserved word do?T-SQL“LineNo”保留字究竟有什么作用? 【发布时间】:2011-05-02 13:20:14 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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 Cumulative Update 5 (10.50.1753.0))仍然正确。

【讨论】:

太棒了——如果可以的话,我会再给你 2 票来支持“好答案”。我指出它在查询分析器本身中不起作用,但就像在存储过程中描述的那样起作用。我们必须将此功能仅用于良好的用途,而不是用于与 DBA 搞混... 不,让我们与 DBA 搞砸吧 :-) Msg 208, Level 16, State 1, Line 2792874 ...并且仍然没有记录。 我提出了一个 MS 的错误,我们将看看它有多远。它可能会被拒绝为“按设计”connect.microsoft.com/SQLServer/feedback/details/1426523 Thank you submitting this, but this is not considered an error. Some key words are reserved for future use or because they are used internally. LINENO is not supported for customer use.【参考方案2】:

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

select LnNo [LineNo] from OrderLines.

【讨论】:

这不是问题的答案。

以上是关于T-SQL“LineNo”保留字究竟有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot/JPA:引用的保留字列名不起作用

如何在 Oracle 中转义保留字?

python自学 第三章 python语言基础之保留字、标识符与内置函数

T-SQL如何保留两位小数而不四舍五入[重复]

联合所有但只保留 T-SQL 中一张表的重复项

美元符号 $ 在 url 中有啥作用?