2009-07-01 5 views
2

Aucun de mes IDE d'édition de procédure stockée SQL Server ne semble avoir d'outils pour appliquer des styles d'indentation, donc je trouve que beaucoup de procédures stockées que je vois sont partout. Je trouve que l'indentation améliore vraiment la lisibilité. Je voudrais codifier certaines normes d'indentation des procédures stockées dans le guide de codage de notre société, et je me demande si quelqu'un a des bonnes pratiques à partager. Par exemple, dans une instruction SELECT normale, j'essaie de garder les clauses SELECT, FROM, WHERE, ORDER BY et GROUP BY toutes au même niveau, et de mettre en retrait tout ce qui est en dessous. J'essaie aussi d'indenter chaque JOIN d'un niveau à partir de la table à laquelle elle participe logiquement.Quel style d'indentation utilisez-vous dans les procédures stockées SQL Server?

Est-ce que quelqu'un d'autre a des conseils similaires ou des pratiques d'excellence?

+0

I tiret aussi sous les mots clés importants que vous décrivez. – steamer25

Répondre

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 

Je trouve que je ne possède nécessairement une longueur d'indentation de jeu et au lieu j'essaie de retrait en fonction de la longueur des noms de champs et valeurs. J'aime que mes marges gauches s'alignent le long d'un plan vertical donné et j'aime que mes évaluateurs (comme les signes égaux) s'alignent. J'ai toujours un terme de commande sur un plan vertical différent des valeurs et des champs qui l'accompagnent. J'ai aussi tendance à essayer de faire en sorte que l'espace entre ma commande SELECT et la liste de champs soit égal en longueur à l'espace utilisé par un champ SELECT DISTINCT ou INSERT INTO Table. Mais à la fin, tout ce qui est juste mes préférences. J'aime le code soigné.

1

Je préfère le style suivant:

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

Mon style est presque identique à Justin. Je indent le "et" de sorte que le "d" dans "et" s'aligne avec le "e" dans "où".

Parfois, je capitalise des mots-clés. Quand j'ai un sous-select, je retire tout le sous-select et je le formate comme un select normal.

Un endroit où je peux dévier est si j'ai des douzaines de champs étant sélectionnés. Dans ce cas, j'ai mis plusieurs champs sur une ligne et ajouté un espace blanc pour faire des colonnes de texte paires.

3

Mes sélectionnez formatages:

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

En option (lorsque les lignes trop longues) je partage des lignes aux limites logiques et pièces en fente tiret:

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

Parfois, je suis en utilisant une syntaxe différente pour très simple (sous) sélectionne. Le but principal est de rendre le code lisible et relativement facilement modifiable.

--edit--

à mon humble avis (au moins dans une petite équipe), il n'est pas nécessaire de faire respecter des règles très strictes, cela aide et le soutien maintainig :) Dans notre équipe, où environ 3-4 personnes écrivent plus sql, il est très facile d'établir l'auteur du code, en regardant simplement sql statement - tous les gens utilisent un style quelque peu différent (capitalisation, alias, indentation etc).

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 

Je pense que mon format préféré vient de celui que j'ai récupéré à l'université. Quelque chose à propos du code dans les colonnes bien alignées qui me rend heureux à l'intérieur.

0

Je tends à droite justifier les mots-clés:

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 

Notez que ce n'est pas difficile et rapide. Je suis en faveur d'avoir le SELECT étant le plus que je vais casser la justification (INNER JOIN, ORDER BY). Je vais boucler sur ON et ses semblables si nécessaire, préférant commencer une ligne avec un mot-clé, si possible.

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

Je Prefair le style suivant ...

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 
) 

J'essaie aussi et de ne pas utiliser le mot-clé As. Je prefair est égal à la place. Probablement bouleversé quelques personnes, mais je trouve ce code beaucoup plus facile à lire ...

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

Plutôt que ...

Select 
    tbl.Id As Identity, 
    tbl.UserName As User, 
    tbl.Age As Age, 
    tbl.DateOfBirth As DOB 
From 
    tbl 
Questions connexes