在select子句中使用equals设置列别名

问题描述

今天我看到有人使用这种语法(A)在sql select中设置列别名。

A

Select [ColumnAlias] = Column1 FROM Table

B

我通常使用

Select Column1 AS [ColumnAlias] FROM Table

我使用=来设置局部变量,但是从来没有将其用作别名。 Select @LocalVar = Column1 FROM Table

有没有理由比B更喜欢B?我似乎在A搜索中找不到很多东西。

解决方法

很少有RD​​BMS支持等于语法,但是VB / C#应用程序开发人员通常会使用该语法,然后他们由于向变量分配值的相似性而学习MS SQL Server,这当然是肯定的。一种查看它的方法,尽管我找不到参考文献,但可能还是采用了这种语法来鼓励开发人员采用MS SQL平台。

问题在于这种用法是模棱两可的,因为可以使用相同的语法将列的值实际分配给变量,或者在UPDATE语句中将值分配给另一列:

-- assign the variable the value from Column1
SELECT @MyVar = Column1 FROM Table

-- Update Column2 with the value from Column1
UPDATE Column2 = Column1 FROM Table

在所有SQL RDBMS中都支持使用AS关键字,因为在CAST函数中仅存在相似的语法,因此它的含糊性要低得多。

AS更具表现力,很清楚,意图是什么,不能把它误认为是一项任务。

使用AS也被视为更标准,因为相同的语法可用于别名化表,视图和SQL查询中的其他记录集。

值得注意的是,AS在大多数RDBMS中在技术上是可选的,因此您可以完全省略它,但是这样做可能会导致其他问题,特别是如果您要使用的别名实际存在时列或表的名称。此处记录了使用“ AS”的原因:https://www.databasestar.com/sql-alias/

因此,尽管这些变体都可以为SQL Server中的列添加别名:

SELECT Column1 AS [alias] from Table
SELECT Column1 AS 'alias' from Table
SELECT Column1 [alias] FROM Table
SELECT [alias] = Column1 FROM Table

只有AS(或省略它)可以为表加上别名

SELECT Column1 AS [alias] from Table as t
SELECT Column1 [alias] FROM Table t
SELECT Column1 alias FROM Table [t]

以下内容不适用于表别名
请注意,我们不能将表别名为字符串值,它必须是标记的名称

SELECT Column1 AS 'alias' from Table AS 't'
SELECT [alias] = Column1 FROM t = Table

在查询中,任何类型的 (不仅仅是列)在所有表中使用AS是最普遍支持的语法。因此,您也会发现它也是最常用的语法。