Sql server 在SQL Server存储过程中使用什么缩进样式?

Sql server 在SQL Server存储过程中使用什么缩进样式?,sql-server,stored-procedures,coding-style,Sql Server,Stored Procedures,Coding Style,我的SQL Server存储过程编辑IDE似乎都没有任何工具来强制执行缩进样式,因此我发现我看到的许多存储过程到处都是。我发现缩进确实提高了可读性。我想在我们公司的《编码风格指南》中编纂一些存储过程识别标准,我想知道是否有人愿意分享任何最佳实践 例如,在一个普通的SELECT语句中,我尝试将SELECT、FROM、WHERE、ORDER BY和GROUP BY子句保持在同一级别上,并缩进低于该级别的任何内容。我还尝试将每个连接从逻辑上连接到的表中缩进一级 其他人有类似的建议或最佳做法吗?我更喜欢

我的SQL Server存储过程编辑IDE似乎都没有任何工具来强制执行缩进样式,因此我发现我看到的许多存储过程到处都是。我发现缩进确实提高了可读性。我想在我们公司的《编码风格指南》中编纂一些存储过程识别标准,我想知道是否有人愿意分享任何最佳实践

例如,在一个普通的SELECT语句中,我尝试将SELECT、FROM、WHERE、ORDER BY和GROUP BY子句保持在同一级别上,并缩进低于该级别的任何内容。我还尝试将每个连接从逻辑上连接到的表中缩进一级


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

我更喜欢以下风格:

--
-- 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

我的风格几乎和贾斯汀的一模一样。我缩进了,所以d在,和e在哪里对齐

有时我把关键词大写。当我有一个子选择时,我缩进整个子选择,并将其格式化为与常规选择相同的格式

我可能会偏离的一个地方是,如果我选择了几十个字段。在这种情况下,我将多个字段放在一行中,并添加空白,以使文本列均匀

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命令和字段列表之间的空间长度等于SELECT DISTINCT字段或INSERT INTO表所使用的空间

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

我的选择格式:

--
-- 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语句,所有人都使用不同风格的大写字母、别名、缩进等

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课程。关于排列整齐的列中的代码,这让我很高兴。

我倾向于右对齐关键字:

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
    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

我也在你描述的重要关键词下缩进。
Select
    tbl.Id As Identity,
    tbl.UserName As User,
    tbl.Age As Age,
    tbl.DateOfBirth As DOB
From
    tbl