代码之家  ›  专栏  ›  技术社区  ›  JeffO

使用SQL代码格式化的分隔符优先格式化(SFF)是否更易于阅读/维护?[闭门]

  •  1
  • JeffO  · 技术社区  · 17 年前

    您是否将分隔符(逗号、and或运算符)放在行的前面?

    Select Field1
        , Field2
      --, Field3
    From [some_table] as ST
    Inner Join [other_table] as OT
       ON ST.PKID = OT.FKID
    Where [this] = [that]
       and [one_other] > 53;
    

    我认为最好的功能是帮助公开重要的操作员(和/或)。作为第二个优势,它似乎更容易注释掉。

    不确定我最初是从哪里学来的,但Andrew Novick在“Transact-SQL用户定义函数”中提到了它(听他说;免费获得了这本书,并极力推荐)

    7 回复  |  直到 13 年前
        1
  •  4
  •   l0b0    17 年前

    注释出来比较容易,但我更倾向于可读性——当代码发生很大变化时,使用下面这样的列布局有点尴尬,但是获得一个概述是非常舒服的:

    select foo.bar,
           baz.ban,
           foobar.bazban
      from foomatic  foo
      join bartastic bar  on bar.id  = foo.id
      join anemone   anem on anem.id = bar.id
     where foo.bar <> 1 and
           baz.ban =  'foo' and
           (
             anem.bear in ('a', 'b') or
             anem.zoo  is null
           )
    ;
    
        2
  •  2
  •   Andrew Hare    17 年前

    我个人不觉得这更容易阅读,但那只是因为我不习惯。重要的是要记住 一致性是关键

        3
  •  2
  •   Chris Cameron-Mills    17 年前

    在我的工作场所(有大约10名开发人员的小型咨询公司,专门从事Oracle),这就是我们的惯例,因此:

    SELECT
      p.id pd_id
    , p.var_no
    , p.status
    , o.name operator
    , o.r_id
    , o.r_type
    , o.start_datetime
    , o.end_datetime
    --, p.id rd_id
    --, p.s_control
    , p.xml_data last_d_res_xml
    FROM schema_a.table_x p
    JOIN schema_b.table_y o ON p.id = o.pd_id
    WHERE p.some_id = 11
    ORDER BY pd_id DESC, end_datetime DESC NULLS FIRST
    

    我们发现它非常清晰,并且允许在调试时轻松注释列。我花了一段时间才习惯,但我现在更喜欢这种风格——我们整个团队都在使用这种风格。

        4
  •  2
  •   Sinan Ünür    17 年前

    “易于注释”-除非您想注释掉第一项。

    不管你的分隔符是在行的开头还是结尾,总会有一个边缘情况,你不能应用“容易注释掉”的标准。

    • 更改查询的含义
    • 导致语法错误

    一般来说,对于where子句,如果不是全部AND,那么我倾向于嵌套:

    WHERE
        ColumnA = 1 AND
        ColumnB = 2 AND
        (
            ColumnC = 3 OR
            ColumnD = 4
        )
    

    这有助于您发现需要注释运算符或在注释块前面添加“1=1”条件的边缘情况(如上所述)。

        5
  •  1
  •   Nick    17 年前

        6
  •  1
  •   Jeffrey Kemp    17 年前

    这是我最近一次约会的标准。我花了一点时间才习惯,现在我觉得其他事情都很奇怪:)

    SELECT e.emp_id
          ,e.emp_name
          ,d.dept_name
    FROM   emp   e
          ,dept  d
    WHERE  e.dept_id        = d.dept_id
    AND    d.is_active      = 'Y'
    AND    e.current_status = 'ACTIVE'
    AND    (e.class IN ('x','y','z')
            OR e.class_na = 'Y')
    ORDER BY e.emp_name
            ,d.dept_name;
    

    我们发现,将所有内容排列在列中可以使查询更容易阅读,特别是在PL/SQL中有大量SQL语句的情况下。SQL在周围的过程代码中脱颖而出。

        7
  •  0
  •   gbn    17 年前

    这将突出显示查询的重要部分。现在在选择列表中,分隔符前端或端部仅起作用

    我发现上面所有的例子都很难读。

    Select
        Field1
        , Field2
        --, Field3
    From
        [some_table] as ST
        Inner Join
        [other_table] as OT ON ST.PKID = OT.FKID
    Where
        [this] = [that]
        and
        [one_other] > 53;
    
    
    Select
        Field1,
        Field2 --,
        --Field3
    From
        [some_table] as ST
        Inner Join
        [other_table] as OT ON ST.PKID = OT.FKID
    Where
        [this] = [that]
        AND
        [one_other] > 53;