如何格式化SQL代码?
你应该使用什么样的缩进?
关键字应该是大写吗?
如何列出名单?
答案 0 :(得分:5)
虽然我意识到这个问题可能因为“主观”而被关闭......我认为这很重要,因为我讨厌支持其他开发人员将所有内容放在一行中全部小写。
我喜欢我所有开发人员采用的风格是:
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'
我通常不会费心将它分成不同的行。