... existe-t-il une norme ou une convention pour la mise en forme du code SQL?
Standard, non. Vous pouvez placer une instruction SQL entière sur une seule ligne en ce qui concerne un analyseur SQL.
Convention, bien sûr il y en a beaucoup. Cela dépend si vous essayez de maximiser la modification ou de minimiser l'espace. J'ai écrit des formateurs SQL pour les deux cas.
J'ai juste utilisé des combinaisons de caractères particulières pour me dire où rompre l'instruction SQL.
Voici un exemple d'un formateur SQL Java DB2 que j'ai écrit. Un autre programme Java a généré le code Java. Le SQL provenait directement des SYSIBM
tables.
protected void prepareIndex00Select(String codeFacl)
throws SQLException {
StringBuffer sb = new StringBuffer();
sb.append("SELECT CODE_FACL, SEQ_FACL, FILLER_TOF ");
sb.append(" , CODE_TOF, NAME_FACL, NAME_LENGTH ");
sb.append(" , CODE_FMB, ID_NCIC_ORI, NBR_PRINTER_PREFIX ");
sb.append(" , ID_PERSONNEL_OFC, COMPLEX_CODE ");
sb.append(" , PHS_CODE, DESIG_FACL_GRP, IND_DESIG_AUTH ");
sb.append(" , CODE_FACL_I_T, INTKEY_FACL, IND_CDM_SENTENCING ");
sb.append(" , MAL_FEM_IND, DEL_AFTER, IND_INMATES ");
sb.append(" , VALUE_SO_CPU_STD, VALUE_SO_CPU_DAY ");
sb.append(" , CODE_CAT, VALUE_DCN, XIDBKEY ");
sb.append(" , FACL_FK_REGN ");
sb.append(" FROM ");
sb.append(creator);
sb.append(".FACL ");
sb.append(" WHERE CODE_FACL = ? ");
if (additionalSQL != null) sb.append(additionalSQL);
psIndex00 = connection.prepareStatement(sb.toString());
psIndex00.setString(1, codeFacl);
} // End prepareIndex00Select method
Un peu tard, je suis juste tombé dessus, désolé.
Le formateur T-SQL de Poor Man est un formateur T-SQL open source (bibliothèque, plug-in ssms, formateur de fichier de ligne de commande, etc.) - l'implémentation est raisonnablement modulaire et il ne devrait pas être très difficile d'implémenter un tokenizer et un formateur MySQL pour correspondre à ceux de T-SQL (je ne l'ai pas fait principalement parce que je n'ai aucune expérience ou utilisation de MySQL pour le moment, donc ce n'est pas une bonne utilisation de mon temps).
La bibliothèque est implémentée en C # (2.0) avec une licence AGPL - ce qui signifie que vous ne pouvez pas la redistribuer commercialement ou exposer en tant que service public sans publier de modifications, mais pour les utilisateurs internes, elle ne devrait présenter aucun problème, qu'elle soit personnalisée ou ne pas.
Comme @Gilbert Le Blank a déjà répondu, il n'y a certainement pas de norme sur le formatage SQL - même les formateurs commerciaux là-bas, avec les différentes options qu'ils fournissent, ne convergent pas sur les mêmes valeurs par défaut ou même prennent nécessairement en charge les mêmes formats de sortie.
En ce qui concerne l'écriture de votre propre outil à partir de zéro, je vous déconseille si vous avez besoin de gérer une variété de cas: au moins pour T-SQL, gérer des lots SQL multi-instructions avec des clauses CTE WITH, des instructions MERGE, des sous-requêtes et les tables dérivées, etc. se révèlent assez difficiles :)
Dans le cas où c'est une aide: http://www.architectshack.com/PoorMansTSqlFormatter.ashx
la source