我的SQL Server存储过程编辑IDE似乎都没有任何工具来强制缩进样式,所以我发现我看到的很多存储过程都到处都是。我发现缩进确实提高了可读性。我想在我们公司的编码风格指南中编写一些存储过程缩进标准,我想知道是否有人有任何他们想要分享的最佳实践。
例如,在普通的SELECT语句中,我尝试将SELECT,FROM,WHERE,ORDER BY和GROUP BY子句保持在同一级别上,并缩进下面的任何内容。我也尝试将每个JOIN从它逻辑上加入的表中缩进一个级别。
是否有其他人有类似的建议或最佳做法?
答案 0 :(得分:3)
我选择的格式:
--
-- SELECT statements
--
select
t1.field1, t1.field2,
t2.field3,
t3.fieldn
from
tblOne t1
inner join tblTwo t2 on t1.field = t2.field and t1.field2 = t2.field2
left join tblThree t3 on t2.field = t3.field and t2.field2 = t3.field2
left join (
select id, sum(quantity) as quantity
from tbl4
group by id
) t4 on t4.id=t3.id
where
t1.field = 'something'
and t2.field = 'somethin else'
order by
fieldn
可选(当行太长时)我在逻辑边界处分割行并缩进分割部分:
inner join tblTwo as t2
on t1.field = t2.field and t1.field2 = t2.field2
有时我会使用不同的语法进行非常简单的(子)选择。 主要目标是使代码可读并且相对容易修改。
- 编辑 -
恕我直言(至少在小团队中)不需要执行非常严格的规则,这有助于支持和维护:)在我们的团队中,大约3-4人编写大多数sql,很容易建立代码作者,只是看着sql语句 - 所有人都使用了不同的风格(资本化,别名,缩进等)。答案 1 :(得分:2)
SELECT T1.Field1,
T1.Field2,
T2.Field1 As Field 3
FROM Table1 AS T1
LEFT JOIN Table2 AS T2
ON T1.Field1 = T2.Field7
WHERE T1.Field9 = 5
AND T2.Field1 < 900
ORDER BY T2.Field1 DESC
INSERT INTO Table1 (
Field1,
Filed2,
Field3 )
VALUES ( 'Field1',
'Field2',
'Field3' )
UPDATE Table1
SET Field1 = SomeValue,
Field2 = AnotherValue,
FIeld134567 = A ThirdValue
WHERE Field9 = A Final Value
我发现我没有必要设置缩进长度,而是根据字段名称和值的长度尝试缩进。我喜欢我的左边距沿着任何给定的垂直平面排列,我喜欢我的评估者(如等号)排队。我总是在不同的垂直平面上有任何命令项,而不是它的伴随值和字段。我还倾向于尝试使SELECT命令和Field列表之间的空间长度等于SELECT DISTINCT Field或INSERT INTO Table使用的空间。
但最后,所有这些只是我的偏好。我喜欢整洁的代码。
答案 2 :(得分:2)
我预先设定了以下风格......
Select
Id = i.Identity,
User = u.UserName,
From
tblIdentities i
Inner Join
tblUsers u On i.UserId = u.UserId
Where
(
u.IsActive = 'True'
And
i.Identity > 100
)
另外,我尝试不使用As
关键字。相反,我预先平等。可能会让一些人感到不安,但我觉得这段代码更容易阅读...
Select
Id = tbl.Identity,
User = tbl.UserName,
Age = tbl.Age,
DOB = tbl.DateOfBirth
From
tbl
而不是......
Select
tbl.Id As Identity,
tbl.UserName As User,
tbl.Age As Age,
tbl.DateOfBirth As DOB
From
tbl
答案 3 :(得分:1)
我更喜欢以下风格:
--
-- SELECT statements
--
select field1,
field2,
field3,
fieldn
from tblOne as t1
inner join tblTwo as t2
on t1.field = t2.field
and t1.field2 = t2.field2
left outer join tblThree as t3
on t2.field = t3.field
and t2.field2 = t3.field2
where t1.field = 'something'
and t2.field = 'somethin else'
order by fieldn
--
-- IF statements
--
if @someVar = 'something'
begin
-- statements here
set @someVar2 = 'something else'
end
--
-- WHILE statements
--
while @count < @max
begin
set @count = @count + 1
end
答案 4 :(得分:1)
SELECT T1.Field1,
T1.Field2,
T2.Field1 AS Field 3
FROM Table1 AS T1
LEFT JOIN Table2 AS T2 ON T1.Field1 = T2.Field7
WHERE T1.Field9 = 5
AND T2.Field1 < 900
ORDER BY T2.Field1 DESC
INSERT INTO Table1 (Field1, Field2, Field3)
VALUES ('Field1', 'Field2', 'Field3' ) /* for values trivial in length */
UPDATE Table1
SET Field1 = SomeValue,
Field2 = AnotherValue,
FIeld134567 = A ThirdValue
WHERE Field9 = A Final Value
我认为我的首选格式来自于我在大学时收到的一个COBOL课程。关于非常对齐的列中的代码的一些内容让我内心开心。
答案 5 :(得分:0)
我的风格几乎与贾斯汀的风格相同。我缩进“和”,所以“和”中的“d”与“where”中的“e”对齐。
有时我会将关键字大写。当我有一个子选择时,我缩进整个子选择并将其格式化为常规选择。
如果我选择了数十个字段,我可能会偏离的地方。在这种情况下,我将几个字段放在一行中并添加空格以使偶数列文本。
答案 6 :(得分:0)
我倾向于对关键字进行右对齐:
SELECT T1.Field1, T2.Field2
FROM Table1 AS T1
LEFT JOIN Table2 AS T2 ON T1.Field1 = T2.Field7
WHERE T1.Field9 = 5
AND T2.Field1 < 900
ORDER BY T2.Field1 DESC
请注意,这不是硬性的。我赞成让SELECT成为最左边的,我将打破理由(INNER JOIN,ORDER BY)。如果可能的话,我将打开ON和它的同类,如果可能的话,我更喜欢用关键字开始一行。
LEFT JOIN Table2 AS T2
ON T1.Field1 = T2.Field7 AND T2.Field8 IS NOT NULL