Règles de formatage de SQL – virgules et espacement en T-SQL

Cet article décrit quelques possibilités de virgules et de l’espacement formatage dans T-SQL en utilisant ApexSQL Refactor, un formateur de SQL gratuit avec près de 200 options de formatage de SQL.

Virgules de formatage dans T-SQL

Les virgules en T-SQL sont utilisées pour formater les nombres, comme séparateurs de liste et séparateurs de valeur. Lorsque les virgules sont utilisées comme séparateurs, il n’y a aucune règle spécifique pour placer des virgules à la fin d’une ligne ou au début.

Certaines opinions sont fondées sur le fait que les langues anglaises et européennes se lisent de gauche à droite et que la position naturelle de la virgule de séparation dans les langages de programmation est à la fin d’une ligne.

“Mettez des virgules à la fin d’une ligne, pas au début. Une virgule, point-virgule, point d’interrogation, ou des points sont des signaux visuels que quelque chose vient de se terminer, non pas qu’elle commence. Avoir une virgule au début d’une ligne fera bouger l’œil vers la gauche comme pour chercher ce mot manquant qui devrait se trouver avant la virgule “ [1]

SELECT
       e.BusinessEntityID, 
       p.Title, 
       p.FirstName, 
       p.MiddleName, 
       p.LastName, 
       p.Suffix, 
       s.Name AS Shift, 
       d.Name AS Department, 
       d.GroupName, 
       edh.StartDate, 
       edh.EndDate

Cependant, le plus souvent des virgules comme séparateurs de liste sont écrits au début d’une ligne pour pouvoir commenter des éléments de la liste plus facilement durant le développement. Ceci est également un standard dans la base de données AdventureWorks2012:

SELECT
     e.BusinessEntityID
   , p.Title
   , p.FirstName 
   , p.MiddleName
   , p.LastName -- easier commenting of list members  
   , p.Suffix
   , s.Name AS Shift
   , d.Name AS Department
   , d.GroupName
   , edh.StartDate 
   , edh.EndDate;

Les deux options de formatage de virgules dans les listes de colonnes sont disponibles dans ApexSQL Refactor sous l’onglet Data Statements dans le dialogue Column list options:

Both options for formatting commas are found in column lists tab

Certains vont placer des virgules au début de la ligne pour pouvoir commenter les values plus facilement:

     VALUES
           ('DepartmentName'
            ,'GroupName'
            ,GetDate())

D’autres vont placer les virgules en fin de ligne pour suivre les conventions linguistiques européennes:

     VALUES 
           ('DepartmentName',
            'GroupName',
             GetDate())

Il ya aussi une option pour formater les virgules dans les listes de valeurs, dans la boîte de dialogue Formatting options sous l’onglet Value lists:

Options to format commas located under the value lists tab

Espacement dans T-SQL

En utilisant ApexSQL Refactor vous pouvez obtenir une meilleure lisibilité de votre code T-SQL en vous servant de plusieurs options d’espacement dans l’onglet General de la boîte de dialogue Formatting options et assurer aussi une indentation correcte:

  1. Pour une meilleure lisibilité avec les espaces et les virgules, choisissez l’option Add spaces after commas dans l’onglet General du dialogue Formatting options:

    Choosing the Add spaces after commas option

    Avant:

    INSERT INTO HumanResources.Shift(Name,StartTime,EndTime,ModifiedDate)

    Après:

    INSERT INTO HumanResources.Shift(Name, StartTime, EndTime, ModifiedDate)
  2. Utilisez l’option Add spaces around comparison operators:

    Dialog showing the Add spaces around comparison operators option

    Avant:

    WHERE b.[ProductAssemblyID]=@StartProductID 
                AND @CheckDate>=b.[StartDate] 
                AND @CheckDate<=ISNULL(b.[EndDate], @CheckDate)

    Après:

    WHERE b.[ProductAssemblyID] = @StartProductID 
                AND @CheckDate >= b.[StartDate] 
                AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate)
  3. Utilisez l’option Add spaces around arithmetic operators:

    Dialog showing the Add spaces around arithmetic operators option

    Avant:

    SELECT (quantity*2) FROM products WHERE order_number = 10;
    SELECT (quantity*5) FROM products WHERE order_number = 10;

    Après:

    SELECT (quantity * 2) FROM products WHERE order_number = 10;
    SELECT (quantity * 5) FROM products WHERE order_number = 10;
  4. Utilisez l’option Add spaces around assignment operators:

    “Le signe égal (=) est le seul opérateur d’assignement Transact-SQL” [2]

    Dialog showing the Add spaces around assignment operators option

    Avant

    SELECT(quantity * 2) FROM products WHERE order_number=10;
    SELECT(quantity * 5) FROM products WHERE order_number=10;

    Après:

    SELECT(quantity * 2) FROM products WHERE order_number = 10;
    SELECT(quantity * 5) FROM products WHERE order_number = 10;
  5. Et ajoutez des espaces a l’intérieur et à l’extérieur des parenthèses

    Dialog showing options for adding spaces inside and outside parentheses

    Avant

    SELECT(quantity * 2) FROM products WHERE order_number = 10;
    SELECT(quantity * 5) FROM products WHERE order_number = 10;

    Après:

    SELECT ( quantity * 2 ) FROM products WHERE order_number = 10;
    SELECT ( quantity * 5 ) FROM products WHERE order_number = 10;

Références:

[1] Joe Celko’s SQL Programming Style
[2] Assignment Operator (Transact-SQL)

Ressources utiles:

Books Online for SQL Server – Arithmetic Operators
Books Online for SQL Server – Comparison Operators (Transact -_SQL)

Article traduit par Régis Baccaro

August 21, 2015