2009-07-01 12 views
2

Keiner meiner SQL Server-Bearbeitungsprozeduren für gespeicherte Prozeduren scheint über Tools zum Erzwingen von Einzugsstilen zu verfügen. Daher finde ich, dass viele gespeicherte Prozeduren überall zu finden sind. Ich finde indent wirklich verbessert die Lesbarkeit. Ich möchte einige Standards für die Einrückung gespeicherter Prozeduren in unserem Coding Style Guide kodieren, und ich frage mich, ob jemand Best Practices hat, die er teilen möchte.Welchen Einzugsstil verwenden Sie in SQL Server gespeicherten Prozeduren?

Zum Beispiel versuche ich in einer normalen SELECT-Anweisung, die SELECT-, FROM-, WHERE-, ORDER BY- und GROUP BY-Klauseln alle auf der gleichen Ebene zu halten und etwas darunter einzuziehen. Ich versuche auch, jedes JOIN eine Ebene von der Tabelle einzunicken, in die es logisch hineingeht.

Hat noch jemand ähnliche Ratschläge oder Best Practices?

+0

ich auch Einzug unter wichtigen Keywords wie Sie beschreiben. – steamer25

Antwort

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 

Ich finde, dass ich unbedingt nicht einen Satz Einbuchtung Länge und stattdessen versuchen, ich bezogen auf die Länge der Feldnamen und Werte einrücken. Ich mag meine linken Ränder, um entlang irgendeiner gegebenen vertikalen Ebene auszurichten, und ich mag meine Bewerter (wie Gleichheitszeichen), sich anzustellen. Ich habe immer einen Befehlsterm in einer anderen vertikalen Ebene als die zugehörigen Werte und Felder. Ich tendiere auch dazu, den Abstand zwischen meinem SELECT-Befehl und der Feldliste in der Länge gleich dem Abstand zu machen, der von einem SELECT-DISTINCT-Feld oder INSERT INTO-Tabelle verwendet wird.

Aber am Ende ist das alles nur meine Vorlieben. Ich mag ordentlich aussehenden Code.

1

Ich ziehe den folgenden Stil:

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

Mein Stil zu Justins fast identisch ist. Ich ziehe das "und" ein, so dass das "d" in "und" mit dem "e" in "where" übereinstimmt.

Manchmal Großschreibung Schlüsselwörter. Wenn ich eine Unterauswahl habe, ziehe ich die gesamte Unterauswahl ein und formatiere sie wie eine normale Auswahl.

Ein Ort, wo ich abweichen kann, ist, wenn ich Dutzende von Feldern ausgewählt habe. In diesem Fall füge ich mehrere Felder zu einer Zeile hinzu und füge Leerräume hinzu, um gerade Textspalten zu erzeugen.

3

Meine wählen Formatierungen:

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

Optional (wenn Linien bekommen zu lange) Ich gespalten Linien an logischen Grenzen und indent Teile gesplittet:

inner join tblTwo as t2 
     on t1.field = t2.field and t1.field2 = t2.field2 

Manchmal andere Syntax verwende ich für sehr einfach (sub) wählt aus. Hauptziel ist es, Code lesbar und relativ leicht modifizierbar zu machen.

--edit--

IMHO (zumindest in kleinen Teams) ist es nicht zu erzwingen sehr strenge Regeln erforderlich ist, hilft diese Unterstützung und Wartung! :) In unserem Team, wo etwa 3-4 Personen am meisten schreiben sql, es ist sehr einfach, Code-Autor zu etablieren, nur Blick auf SQL-Anweisung - alle Leute verwenden etwas anderen Stil (Großbuchstaben, Aliase, Einrücken usw.).

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 

Ich denke, dass mein bevorzugtes Format von dieser einen COBOL-Klasse stammt, die ich zurück in der Universität nahm. Etwas über Code in ziemlich ausgerichteten Spalten, die mich innerlich glücklich machen.

0

ich neigen dazu, rechtsbündig die Schlüsselwörter:

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 

Hinweis, dass es nicht hieb- und stich schnell. Ich bevorzuge die Tatsache, dass der SELECT am weitesten links liegt, dass ich die Ausrichtung unterbrechen werde (INNER JOIN, ORDER BY). Ich werde bei Bedarf auf ON und seine Art einpacken und bevorzuge, wenn möglich, eine Zeile mit einem Schlüsselwort zu beginnen.

LEFT JOIN Table2 AS T2 
     ON T1.Field1 = T2.Field7 AND T2.Field8 IS NOT NULL 
2

I PreFair die folgende Art ...

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 
) 

Auch ich versuche und nicht die As Schlüsselwort zu verwenden. Ich bevorzuge stattdessen gleich. Wahrscheinlich verärgert ein paar Leute, aber ich finde, diesen Code viel einfacher zu lesen ...

Select 
    Id = tbl.Identity, 
    User = tbl.UserName, 
    Age = tbl.Age, 
    DOB = tbl.DateOfBirth 
From 
    tbl 

Anstatt ...

Select 
    tbl.Id As Identity, 
    tbl.UserName As User, 
    tbl.Age As Age, 
    tbl.DateOfBirth As DOB 
From 
    tbl 
Verwandte Themen