T-SQL - 使用"="与"as"进行别名化

mwj*_*son 22 sql t-sql sql-server

是否有任何特殊原因(性能或其他方面)在使用别名列时使用AS?

我个人的偏好(为了便于阅读)是使用这个:

select
alias1     = somecolumn
alias2     = anothercolumn
from
tables
etc...
Run Code Online (Sandbox Code Playgroud)

而不是这个:

select
somecolumn as alias1
anothercolumn as alias2
from
tables
etc...
Run Code Online (Sandbox Code Playgroud)

我错过了任何我不应该这样做的理由吗?在格式化列时,其他人的偏好是什么?

bob*_*nce 23

'='不是有效的ANSI SQL,因此如果您希望在不同的DBMS上运行应用程序,则会遇到困难.

(当使用ANSI表格但省略了可选的'AS'时,我发现个人难以阅读的结果.)

  • 可读性判断比较主观!:-) 您需要不同 DBMS 的频率取决于项目类型;如果它是依赖 T-SQL 扩展的面向 MS 的公司的内部工具可能是合适的;例如,对于一个开源项目,它并不真正适合。 (2认同)
  • 呵呵。祝你好运用正则表达式解析 SQL... ;-) (2认同)

Lie*_*ers 13

为了加入一些配重,我更喜欢使用=.

如果我以某种方式成为查询结果的使用者,我发现查看作为消费者的哪些列可以使用它更方便.

我更喜欢这个

SELECT
      [ElementObligationID] = @MaxElementObligationID + eo.ElementObligationID
      , [ElementID] = eo.ElementID
      , [IsotopeID] = eo.IsotopeID
      , [ObligationID] = eo.ObligationID
      , [ElementWeight] = eo.ElementWeight * -1
      , [FissileWeight] = eo.FissileWeight * -1
      , [Items] = eo.Items * -1
      , [Comment] = eo.Comment
      , [AdditionalComment] = eo.AdditionalComment
      , [Aanmaak_userid] = @UserID
      , [Aanmaak_tijdstip] = GetDate()
      , [Laatste_wijziging_userid] = @UserID
      , [Laatste_wijziging_tijdstip] = GetDate()
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID
Run Code Online (Sandbox Code Playgroud)

在此

SELECT
      @MaxElementObligationID + eo.ElementObligationID AS [ElementObligationID]
      , eo.ElementID AS [ElementID]
      , eo.IsotopeID AS [IsotopeID]
      , eo.ObligationID AS [ObligationID]
      , eo.ElementWeight * -1 AS [ElementWeight]
      , eo.FissileWeight * -1 AS [FissileWeight]
      , eo.Items * -1 AS [Items]
      , eo.Comment AS [Comment]
      , eo.AdditionalComment AS [AdditionalComment]
      , @UserID AS [Aanmaak_userid]
      , GetDate() AS [Aanmaak_tijdstip]
      , @UserID AS [Laatste_wijziging_userid]
      , GetDate() AS [Laatste_wijziging_tijdstip]
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID
Run Code Online (Sandbox Code Playgroud)

只是我的2c.


Pre*_*gha 8

我不会简单地使用它,因为它看起来太像平等操作.'AS'很清楚,因为它对我来说并不含糊.

它与在sql中不使用大写相同,我发现它更难阅读.


gbn*_*gbn 6

“ =”只是模棱两可。

如果您要缩进每个select子句...

select
    alias1     = somecolumn,
    alias2     = anothercolumn,
    result     = column1 * column2
from
    table
....


select
    somecolumn as          alias1,
    anothercolumn as       alias2,
    column1 * column2 as   result
from
    tables
     ...
Run Code Online (Sandbox Code Playgroud)

  • 虽然我不同意=不明确,但这是一个不错的选择。 (3认同)
  • 良好的缩进确实有助于提高可读性。但我总是将“AS”对齐在别名之前的右侧。它更具可读性。 (2认同)

Mar*_*ell 5

=可以与分配和平等混淆;实际上,我真正不喜欢的形式是当它看起来像一个字符串时(通常在涉及空格时):

somecolumn as 'alias 1'
Run Code Online (Sandbox Code Playgroud)

要么

'alias 1' = somecolumn
Run Code Online (Sandbox Code Playgroud)

我更喜欢替代符号:

somecolumn as [alias 1]
Run Code Online (Sandbox Code Playgroud)


Dam*_*ver 5

后缀别名形式(带或不带“AS”)在列别名和表别名之间是一致的。就个人而言,我想要一个强制使用“AS”的选项,然后你就不会遇到这种情况:

select
    columnA,
    columnB
    columnC
from
    table
Run Code Online (Sandbox Code Playgroud)

生成具有两列而不是预期的 3 列的结果集。

我还想说,使用前缀“=”形式,如果您混合获取结果集和变量赋值,可能会使阅读变得更加困难:

select
    cA = columnA,
    @cB = columnB,
    cC = columnC
from
    table
Run Code Online (Sandbox Code Playgroud)


小智 5

我不像其他在这里发帖的人那么幸运。我使用的代码通常是由其他人编写的,很少有没有CASE语句或其他计算,串联或逻辑导致单个条目跨越T_SQL脚本的几行。

到目前为止,使用等号代替“ AS”更容易阅读。使用等号,您知道要查找的别名在行的第一位置。当使用“ AS”并且T_SQL跨越多行时,别名实际上可以在任何地方。

与使用“ AS”时相比,使用equals时查找“ Items”别名要容易得多。

    SELECT
        ElementObligationID = @MaxElementObligationID + eo.ElementObligationID
      , ElementID = eo.ElementID
      , IsotopeID = eo.IsotopeID
      , ObligationID = eo.ObligationID
      , ElementWeight = eo.ElementWeight * -1
      , FissileWeight = eo.FissileWeight * -1
      , Items = CASE WHEN eo.Items < 0 THEN eo.Items * -1
                     WHEN eo.Items > 0 THEN eo.Items
                     ELSE 0 END
      , Comment = eo.Comment
      , AdditionalComment = eo.AdditionalComment
      , Aanmaak_userid = @UserID
      , Aanmaak_tijdstip = GetDate()
      , Laatste_wijziging_userid = @UserID
      , Laatste_wijziging_tijdstip = GetDate()
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID
Run Code Online (Sandbox Code Playgroud)

现在想象一下,这里的代码量超过了5倍,并且需要查找“ Items”别名。

SELECT
      @MaxElementObligationID + eo.ElementObligationID AS ElementObligationID
      , eo.ElementID AS ElementID
      , eo.IsotopeID AS IsotopeID
      , eo.ObligationID AS ObligationID
      , eo.ElementWeight * -1 AS ElementWeight
      , eo.FissileWeight * -1 AS FissileWeight
      , CASE WHEN eo.Items < 0 THEN eo.Items * -1
             WHEN eo.Items > 0 THEN eo.Items
             ELSE 0 END AS Items
      , eo.Comment AS Comment
      , eo.AdditionalComment AS AdditionalComment
      , @UserID AS Aanmaak_userid
      , GetDate() AS Aanmaak_tijdstip
      , @UserID AS Laatste_wijziging_userid
      , GetDate() AS Laatste_wijziging_tijdstip
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID
Run Code Online (Sandbox Code Playgroud)

“ AS”与“ =”不是反复无常且任意的偏好。当我说有时需要几分钟的时间才能找到我要查找的别名时,我并不夸张,因为我现在负责维护的脚本的作者没有使用等号和别名。与支付IT专业人员在代码中查找别名相比,我想不出更大的时间,金钱和资源浪费!!如果您关心可维护性,可读性和效率,那么有对与错的答案。您的工作是提供业务价值,而不是花一天的时间寻找Waldo!