T-SQL - псевдоним с использованием "=" против "как" - PullRequest
20 голосов
/ 01 октября 2009

Есть ли какая-либо конкретная причина (производительность или иное) для использования AS перед = при псевдониме столбца?

Мое личное предпочтение (для удобства чтения) - использовать это:

select
alias1     = somecolumn
alias2     = anothercolumn
from
tables
etc...

вместо этого:

select
somecolumn as alias1
anothercolumn as alias2
from
tables
etc...

Я пропускаю какие-либо причины, почему я не должен этого делать? Каковы предпочтения других людей при форматировании их столбцов?

Ответы [ 15 ]

22 голосов
/ 01 октября 2009

‘=’ не является допустимым ANSI SQL, поэтому у вас возникнут трудности, если вы захотите запустить свое приложение в другой СУБД.

(Это когда форма ANSI используется, но опциональное «AS» опущено, я считаю, что результаты трудно читать лично.)

14 голосов
/ 01 октября 2009

Чтобы сложить противовес, я предпочитаю использовать =.

Если я каким-то образом получаю результаты запроса, мне будет удобнее видеть, какие столбцы я, как потребитель, могу использовать.

Я предпочитаю это

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

сверх этого

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

только мой 2с.

8 голосов
/ 01 октября 2009

Я бы не использовал его просто, так как он выглядит слишком похоже на операцию равенства. «КАК» ясно, поскольку это не для меня двусмысленно.

Это то же самое, что не использовать верхний регистр в sql, мне труднее читать.

5 голосов
/ 21 декабря 2017

Мне не так повезло, как другим, которые разместили здесь. Код, с которым я работаю, обычно пишется кем-то другим, и редко встречаются операторы CASE или другие вычисления, конкатенации или логика, которые приводят к тому, что одна запись охватывает несколько строк сценария T_SQL.

Использование знака равенства вместо «AS» намного проще для чтения. Со знаком равенства вы знаете, что псевдоним, который вы ищете, находится в первой позиции строки. Когда используется «AS» и T_SQL занимает несколько строк, псевдоним может быть буквально где угодно.

Гораздо проще найти псевдоним «Items» при использовании equals, чем при использовании «AS».

    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

Теперь представьте, что у вас более чем в 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

'AS' vs '=' не является капризным и произвольным предпочтением. Я не преувеличиваю, когда говорю, что были времена, когда требовалось несколько минут, чтобы найти псевдоним, который я ищу, потому что автор сценария, за который я сейчас отвечаю, не использовал знак равенства со своим псевдонимом. Я не могу думать о большей трате времени, денег и ресурсов, чем платить ИТ-специалисту за поиск псевдонимов в коде !! Существует правильный и неправильный ответ, если вы заботитесь о удобстве обслуживания, удобочитаемости и эффективности . Ваша задача - обеспечить ценность для бизнеса, а не тратить день на поиски Уолдо!

5 голосов
/ 01 октября 2009

"=" просто двусмысленно.

Если вы сделаете отступ для каждого пункта выбора ...

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


select
    somecolumn as          alias1,
    anothercolumn as       alias2,
    column1 * column2 as   result
from
    tables
     ...
4 голосов
/ 01 октября 2009

Форма псевдонима постфикса (с или без "AS") соответствует псевдонимам столбцов и таблиц. Лично я хотел бы, чтобы опция принудительно использовала «AS», и тогда у вас не было бы ситуации:

select
    columnA,
    columnB
    columnC
from
    table

создание результирующего набора с двумя столбцами вместо ожидаемого 3.

Я бы также сказал, что с префиксом "=" форма может усложнить чтение, если вы смешиваете получение набора результатов и присваивания переменной:

select
    cA = columnA,
    @cB = columnB,
    cC = columnC
from
    table
4 голосов
/ 01 октября 2009

= можно спутать с присваиванием и равенством; на самом деле форма, которую я действительно не люблю, - это когда она выглядит как строка (обычно, когда используются пробелы):

somecolumn as 'alias 1'

или

'alias 1' = somecolumn

Я предпочитаю альтернативные обозначения:

somecolumn as [alias 1]
3 голосов
/ 01 октября 2009

Три известных мне псевдонима:

  1. TableColumn AS MyAlias ​​
  2. TableColumn MyAlias ​​
  3. MyAlias ​​= TableColumn

Re: 1), я предпочитаю это, так как это наиболее самодокументированный код (IMO), и он позволяет мне искать AS, если мне нужно найти псевдонимы ..

Re: 2), это мой второй выбор, но без AS я никогда не уверен, является ли это ошибкой вырезания и вставки или нет, особенно в длинных плохо отформатированных запросах.

Re: 3), мне это не нравится, потому что а) это похоже на присваивание, и б) оно слишком сильно сочетается с ON предложениями и CASE операторами

Итак, мой голос - использовать ключевое слово AS для ваших псевдонимов.

2 голосов
/ 01 октября 2009

Мне нравится

SELECT
 column1 = table.column1
 ,column2 = table.colum2
FROM table

Я считаю, что AS не так легко заметить по сравнению со знаком = (я могу определить = быстрее, чем AS)

Также, когда кто-то просто выбирает псевдоним столбца SELECT, иногда бывает сложно узнать, какой из них какой:)

2 голосов
/ 01 октября 2009

Псевдонимы столбцов, объявленные синтаксисом "=", устарели в SQL Server 2008 и не поддерживаются в следующей версии. См. MSDN статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...