AS 关键字什么时候是可选的还是必需的?

When is the AS keyword optional vs required?

当 AS 关键字是可选的还是必需的时,是否有 "rule set",或者它只是上下文,基于它所使用的语句的语言规范?

例如,当用于别名时,它是可选的。
它在用于声明变量时也是可选的(我相信也可以使用 cast)。
但在创建 UDF 和过程时它不是可选的。

直觉上,似乎 AS 关键字在用于创建别名时是可选的,但在其他情况下是必需的。我相信它也是 CAST 声明的一部分。

此外,这一现有问题可能比您找到的问题更相关:

How to know where AS keyword should be used?

我没有任何正式的规则给你,但从实际的角度来看,对于列别名,我总是使用 AS,因为 IMO 有时它使代码的意图更容易理解。

例如:

create table dbo.Table1  (id int primary key, col1 varchar(100), col2 varchar(100), Name varchar(100))

insert dbo.Table1 (id, col1, col2, name) values (1, 'this is col1', 'this is col2', 'this is name')
GO

select col1, col2 Name from dbo.Table1 -- X
select col1, col2 as Name from dbo.Table1  -- Y

现在,X 行和 Y 行都为您提供了相同的结果。在第 X 行中,可能不清楚编码人员是否打错字并在 col2 和 Name 之间遗漏了一个逗号。在 Y 行,似乎编码器明确希望 return col2 作为列名 "Name"。

这可能不是最好的例子,但我见过与上述类似的问题,原因是遗漏了 "as",拼写错误更难发现。

您实质上是在要求语言设计决定何时(以及为什么)AS 关键字是可选的或必需的。虽然如果不参考设计委员会会议记录就无法确定地回答这个问题,但可能需要 确切地在需要的地方制定明确的语法 ,并且可选的其他地方来维护 自然语言质量最初由语言创造者拥护。