Transact-SQL格式标准(编码样式)

时间:2011-05-16 10:04:37

标签: sql tsql coding-style

  1. 如何格式化SQL代码?

  2. 你应该使用什么样的缩进?

  3. 关键字应该是大写吗?

  4. 如何列出名单?

5 个答案:

答案 0 :(得分:5)

虽然我意识到这个问题可能因为“主观”而被关闭......我认为这很重要,因为我讨厌支持其他开发人员将所有内容放在一行中全部小写。

我喜欢我所有开发人员采用的风格是:

  1. 每个“条款”都在线上。
  2. 关键词全部大写
  3. 如果需要辅助线路,则会进一步选中(例如内部连接的“ON”子句)。
  4. 实施例

    SELECT
        *
    FROM
        dbo.Customers c INNER JOIN dbo.Orders o
            ON o.CustomerID = c.ID
    WHERE
        o.OrderDate > @BlahDate
    

    我的意思是,真的是人......这是讨厌的

    select * from dbo.customers c inner join dbo.orders o on o.customerid = c.id where o.orderdate > @blahdate
    

答案 1 :(得分:2)

请考虑使用SSMS tools pack格式化代码(大写但不是)。缩进是一个偏好的问题。一个经验法则是'TALLER'查询,它的可读性越高。

以下是我将如何格式化的示例(与此处显示的示例略有不同)

SELECT  id, 
        lastfirst, 
        type1, 
        type2,
        email,
        CASE
            WHEN termdate < GETDATE() THEN 'Y'
            ELSE 'N'
        END termed
FROM something man WITH (NOLOCK)
    INNER JOIN city cty WITH (NOLOCK)
        ON cty.code = man.cty_code
            AND cty.state != 'OH'
            AND cty.city != 'CANTON'
WHERE email IS NOT NULL
ORDER BY    type2,
            type1,
            lastfirst

答案 2 :(得分:1)

答案 3 :(得分:0)

没有严格的规则可以使用任何有关格式化的内容。

标准通常是组织特定的,并且按照组织的建议实施。

答案 4 :(得分:0)

我赞成以下类型的布局(一个无意义的查询,它只包含一些受益于某些合理格式化的SELECT语句位的样本。)

总是有一个特定的目标 - 使调试尽可能简单,并确定包含的内容。所以:

SELECT
    a.id,
    b.id,
    CASE
        WHEN a.id + b.id = 1 THEN 
            '1'
        ELSE 
            '2'
    END 'SomeExpresion'
FROM
    sysobjects a
LEFT JOIN
    (
        SELECT TOP 10
            *
        FROM
            sysobjects
    ) b
ON
    a.id = b.id AND
    a.version = b.version
WHERE
    a.id = 1
GROUP BY
    a.id,
    b.id
HAVING
    COUNT(a.id) = 1     

我可以轻松查看连接条件列表,查看嵌套表(及其别名),查看CASE选项,查看自然列表中的分组顺序。 我通常也可以相当容易地在一行中添加一个 - 来注释掉一个特定的子句,通常对SQL的修改很少。我相当不寻常的JOIN布局意味着我可以向下扫描查询的左侧,看它是否为equi / left / right / cross join。当我找到我正在寻找的连接时,我可以扫描所涉及的列(通常在考虑我应该看到哪些列时)

一个警告 - 如果陈述特别短,例如

SELECT Id FROM sysobjects where xtype='u'

我通常不会费心将它分成不同的行。