领先的逗号或尾随逗号?

Luc*_*cas 5 mysql sql sql-server oracle coding-style

我正在为我工​​作的公司编写SQL编码标准.

我读过的文献说领先是最好的选择

select a.name
      ,a.surname
      ,a.address
from person a 
Run Code Online (Sandbox Code Playgroud)

但也是尾随:

select a.name,
       a.surname,
       a.address
from person a 
Run Code Online (Sandbox Code Playgroud)

或者完全不标准

select name, is_disabled,
is_policy_checked, is_expiration_checked
from sys.sql_logins;
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是,是否接受了全球任何SQL编码标准.如果没有,为什么不呢?我认为这将是非常有用的.像PEP8这样的东西.

哪个是解决这个问题最实用的方法?

提前致谢

M.A*_*Ali 5

如果解析并执行查询而没有任何错误.这意味着它符合该语言的基本标准.

至于在哪里放逗号以及如何缩进你的代码,一切都归结为个人偏好.

是的,人们定义了一些最佳实践,大多数人再次将其视为"最佳实践",但不是全部.

有一些最佳实践,大多数人会同意但不是全部.

1)事情很聪明,但不是太聪明(KISS /保持简单愚蠢)

2)Parsed查询不是最好的查询,尝试尽可能编写 Covering Queries.

3)使用至少两部分的名称作为您的对象,如[Schema].[TableName]

4)对象(表,列,存储过程)变量和函数都有很好的命名和有意义,而不必过多考虑.

5)你在周末休息后再回来,你可以直接跳进去

6)将重复使用的东西是可重复使用的

7)看起来更干净的代码.将在以后阶段更容易调试和修改.

8)"评论"使用注释来解释代码片段的作用,所以如果你在一个月之后回到它,那么你只需要阅读注释代码所做的事情,而不是实际通过代码本身.

9)将CAPITALS用于"SELECT,FROM,WHERE"等关键词 - < -

为了上面的查询,记住所有这些事情,我会写这样的东西.

SELECT  A.NAME
       ,A.SURNAME
       ,A.ADDRESS

FROM   PERSON A
Run Code Online (Sandbox Code Playgroud)

回到"重要问题"领导逗号或尾随逗号?

我个人觉得在我的代码中使用引号可以更容易,因为它使我更容易找到下一列的起始位置,或者找到缺少的逗号.

例如在下面的查询中我对堆栈溢出问题之一的回答

SELECT     radius
         , Diameter
         , CASE WHEN POWER( @p1 - x, 2) + POWER( @p2 - y, 2) <= POWER(radius, 2)
             THEN 'Inside The Circle'
            WHEN POWER( @p1 - x, 2) + POWER( @p2 - y, 2) > POWER(radius, 2)
             THEN 'Outside the Circle' END   [Inside/Outside]
FROM @t
Run Code Online (Sandbox Code Playgroud)

如果我有一个逗号,那么领先的逗号可以更容易找到丢失的逗号,并且可以准确地告诉这个SELECT查询有多少列.

一些有用的链接

Aaron Bertrand - 存储过程的最佳实践

Richard Espinoza构建Transact SQL存储过程的SQL Server概念和最佳实践

pinaldave SQL SERVER - 使用关键字作为对象名称的不良做法 - 避免使用关键字作为对象


Guf*_*ffa 2

对于如何编写 SQL 代码没有单一的标准。有些使用大写关键字,有些使用小写。有些使用尾随逗号,有些使用前导逗号,有些将所有值放在同一行。

在普通文本中,您使用尾随逗号,这样对于大多数人来说更容易阅读。使用前导逗号的一个优点是最后一项的格式与其他项没有不同,但另一方面,第一项的格式不同。

解决这个问题的实际方法是在你所属的组织中选择一个合理的标准,并坚持下去。拥有外观一致的代码比试图找到优点最多、缺点最少的格式更有用。

举个例子,经过多年尝试不同的变体,这是我开始使用的格式:

select
    p.Name,
    p.Surname,
    a.Street,
    a.Zip,
    a.City
from
    Person p
    inner join Address a on a.AdressId = p.AddressId
where
    p.PersonId = 42
Run Code Online (Sandbox Code Playgroud)