2009-07-01 24 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 
相關問題