2009-07-01 72 views
2

我的SQL Server存储过程编辑IDE似乎没有任何工具来执行缩进样式,所以我发现我看到的很多存储过程都遍布各处。我发现缩进确实提高了可读性。我想在我们公司的编码风格指南中对一些存储过程缩进标准进行编纂,我想知道是否有人愿意分享任何最佳实践。例如,在普通的SELECT语句中,我尝试将SELECT,FROM,WHERE,ORDER BY和GROUP BY子句全部保留在同一级别上,并在其下面缩进任何东西。我也尝试从它逻辑上加入的表中缩进每个JOIN一个级别。你在SQL Server存储过程中使用什么样的缩进风格?

其他人是否有类似的建议或最佳做法?

+0

我也缩进下显著的关键字,你描述。 – steamer25 2009-07-01 17:10:47

回答

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字段或INSERT INTO表使用的空间。

但最终,所有这些只是我的偏好。我喜欢整洁的代码。

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 
0

我的风格几乎是相同的Justin的。我缩进“和”,所以“和”中的“d”和“where”中的“e”排成一列。

有时我大写关键字。当我有一个子选择时,我缩进整个子选择并将其格式化为常规选择。

我可能会偏离的一个地方是我选择了几十个字段。在这种情况下,我将几个字段放在一行中,并添加空格以制作偶数列的文本。

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 

有时候我使用不同的语法非常简单(子)选择。主要目标是使代码可读并且相对容易修改。不需要

- 编辑 -

恕我直言(至少在小团队),它执行非常严格的规定,这有助于支持和maintainig :)在我们的团队,其中约3-4人写的最sql,建立代码作者非常容易,只需查看sql语句 - 所有人都使用不同的样式(大写,别名,缩进等)。

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类。关于代码的相关对齐列让我开心。

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 
2

我prefair以下样式...

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关键字。我prefair等于代替。也许打乱了几个人,但我觉得这个代码更易于阅读...

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