Подтвердить что ты не робот

T-SQL - сглаживание с использованием "=" в сравнении с "как"

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

Мои личные предпочтения (для удобства чтения) заключаются в следующем:

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

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

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

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

4b9b3361

Ответ 1

'= недействителен ANSI SQL, поэтому вам будет сложно запустить приложение в другой СУБД.

(Когда используется форма ANSI, но необязательный "AS опущен", я считаю, что результаты трудно прочитать лично).

Ответ 2

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

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

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

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

просто мой 2c.

Ответ 3

Я бы не использовал его просто так, как он выглядит слишком сильно, как операция равенства. "AS" понятен, так как он не двусмыслен для меня.

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

Ответ 4

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

Если вы отступаете, чтобы разбить предложение select...

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


select
    somecolumn as          alias1,
    anothercolumn as       alias2,
    column1 * column2 as   result
from
    tables
     ...

Ответ 5

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

Использование знака равенства вместо "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 '=' не является капризным и произвольным предпочтением. Я не преувеличиваю, когда говорю, что были времена, когда понадобилось несколько минут, чтобы найти псевдоним, который я ищу, потому что автор script, которым я сейчас занимаюсь поддержкой, не использовал знак равенства с их псевдонимом, Я не могу думать о большой трате времени, денег и ресурсов, чем платить ИТ-специалисту за поиск псевдонимов в коде! Существует правильный и неправильный ответ, если вы заботитесь о ремонтопригодности, удобочитаемости и эффективности. Ваша задача - обеспечить бизнес-ценность, а не тратить свой день на поиски Waldo!

Ответ 6

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

somecolumn as 'alias 1'

или

'alias 1' = somecolumn

Я предпочитаю альтернативную нотацию:

somecolumn as [alias 1]

Ответ 7

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

select
    columnA,
    columnB
    columnC
from
    table

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

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

select
    cA = columnA,
    @cB = columnB,
    cC = columnC
from
    table

Ответ 8

Три способа, которыми я знаком с псевдонимом:

  • TableColumn AS MyAlias ​​
  • TableColumn MyAlias ​​
  • MyAlias ​​= TableColumn

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

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

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

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

Ответ 9

Я предпочитаю использовать AS, поскольку = используется в инструкции where и может быть запутан в длинном запросе.

Ответ 10

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

SELECT MAX(price_column) maximumprice FROM prices

Ответ 11

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

Ответ 12

Хотя я предпочитаю использовать AS, действительно важно здесь иметь корпоративный стандарт и следовать ему. Если больше ваших людей используют AS, чем =, тогда все должны использовать его. Стандарты кодирования - это то, что упрощает работу с кодом, а не конкретным стандартом, который вы выбираете. Если каждый использует одно и то же, то ваш глаз привыкает к его выбору.

Ответ 13

Мне нравится

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

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

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

Ответ 14

Вам не нужно использовать

Отбросьте AS и используйте

SELECT originalname alias
FROM
   tablename

Ответ 15

Поскольку я пишу SQL для нескольких различных систем управления реляционными базами данных, я предпочитаю использовать синтаксис, который работает на всех из них, что обычно означает написание ANSI-совместимого SQL. Мои обычные предпочтения форматирования:

SELECT S.name AS SchemaName, O.name AS ObjectName, C.column_id AS ColumnId, C.name AS ColumnName FROM sys.schemas AS S INNER JOIN sys.objects AS O ON S.schema_id = O.schema_id INNER JOIN sys.columns AS C ON O.object_id = C.object_id ORDER BY S.name ASC, O.name ASC, C.column_id ASC;

В качестве альтернативы вышеописанному форматированию облегчает просмотр псевдонимов столбцов:

SELECT S.name AS SchemaName, O.name AS ObjectName, C.column_id AS ColumnId, C.name AS ColumnName FROM sys.schemas AS S INNER JOIN sys.objects AS O ON S.schema_id = O.schema_id INNER JOIN sys.columns AS C ON O.object_id = C.object_id ORDER BY S.name ASC, O.name ASC, C.column_id ASC;

Ответ 16

** даже я предпочитаю использовать 'as' вместо '='. '=' вызывает путаницу в коде.

например:

 column as alias1