问题描述
今天我看到有人使用这种语法(A)在sql select中设置列别名。
A
Select [ColumnAlias] = Column1 FROM Table
B
我通常使用
Select Column1 AS [ColumnAlias] FROM Table
我使用=
来设置局部变量,但是从来没有将其用作别名。 Select @LocalVar = Column1 FROM Table
有没有理由比B更喜欢B?我似乎在A搜索中找不到很多东西。
解决方法
很少有RDBMS支持等于语法,但是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
是最普遍支持的语法。因此,您也会发现它也是最常用的语法。