Si vous utilisez SQL Server Management Studio (SSMS) de façon assez intensive, vous avez probablement trouvé que la fonctionnalité IntelliSense de ce dernier souffre de lacunes pour le moins désagréables à l’usage. Parmi celles-ci, on trouve l’impossibilité de chercher une table suivant un mot que son nom contient, ou encore un manque notable sur le scriptage automatique des paramètres d’une procédure stockée ou d’une instruction DML.
C’est ce que à quoi remédie dbForge SQL Complete, qui remplace allègrement SSMS IntelliSense. Je vous propose ici une revue de l’édition Standard de SQL Complete, mais sachez qu’il en existe une version gratuite pour un usage non-commercial.
L’installation du plugin SSMS se fait comme pour toute application. Elle requiert simplement que SSMS ne soit pas en cours d’exécution. Sachez néanmoins que SQL Complete s’intègre bien sûr à SQL Server Management Studio 2012, mais aussi avec Visual Studio 2012 :
Le plugin vérifie automatiquement si une nouvelle version est disponible au démarrage de SSMS, et vous permet d’effectuer le téléchargement de celle-ci. La progression du téléchargement est affichée à gauche dans la barre d’état. Quand celui-ci est terminé, une popup apparait, indiquant l’emplacement du fichier. Il est alors nécessaire de fermer SSMS pour poursuivre la mise à jour du plugin.
Aide à l’écriture de code
Dès le (re)démarrage de SSMS, on trouve un élément de plus dans la barre de menu, nommé SQL Complete. Avant de développer les options de SQL Complete, voyons ce qu’il peut faire. Nous changeons le contexte de bases de données à l’aide de l’instruction USE AdventureWorks2012 : automatiquement, le cache de SQL Complete charge les métadonnées de la base de données en cours d’utilisation, et affiche une barre de progression à droite, dans la barre d’état. On trouve alors la liste des bases de données hébergées par l’instance SQL Server très simplement :
Le simple fait de taper « S » amène la liste suivante :
Nous avons donc en premier une liste de possibilités T-SQL, suivies par une liste de snippets. Nous verrons plus tard qu’il existe un gestionnaire de snippets fort pratique. Supposons que nous voulions écrire SET TRANSACTION ISOLATION LEVEL REPEATABLE. Avec IntelliSence, il faut tout écrire, caractère par caractère. Mais avec SQL Complete, il suffit seulement de taper les premières lettres de chaque mot-clé; les mots-clé qui suivent sont automatiquement pré-filtrés avant l’affichage dans l’infobulle :
Certes, le gain de temps n’est pas énorme, mais cela rend le travail moins pénible en évitant tout simplement les fautes de frappe !
Voyons maintenant comment appeler une procédure stockée sans se fatiguer : on sait que le nom de la procédure stockée contient le mot employee; on tape donc EXEC employee, et on obtient :
Une fois que l’on a validé par ENTER, on peut suivre suggestion de l’infobulle pour obtenir la liste des paramètres :
Et nous obtenons alors :
Avouons que c’est moins pénible que de filtrer la liste produite par l’Explorateur d’Objets de SSMS.
Si nous passons le curseur sur la procédure stockée, nous obtenons une nouvelle fois la liste de ses paramètres dans une infobulle. Si l’on souhaite spécifier la valeur des paramètres un à un, là aussi le travail nous est facilité : supposons que nous avons spécifié le premier paramètre, et que nous venons de taper une virgule, qui va introduire le second : automatiquement, l’infobulle avec la liste des paramètres apparait, et il n’y a plus qu’à sélectionner le paramètre souhaité :
Que l’on soit en train d’écrire un script ou une procédure stockée, l’accès aux variables locales ou aux paramètres d’entrée se fait là aussi très aisément, par l’affichage automatique de l’infobulle :
Si l’on souhaite consulter la définition de la procédure stockée, il suffit de choisir l’option Go To Definition dans le menu contextuel :
L’explorateur d’objets est immédiatement affecté et a sélectionné la procédure stockée.
Notons que la même option est offerte pour tout objet de base de données.
Voyons d’ailleurs comment obtenir la définition d’une table sans pour autant avoir affaire avec l’Explorateur d’Objets de SSMS :
Bref, SQL Complete nous offre un arsenal d’infobulles qui nous permet de gagner du temps en évitant toute faute de frappe, et dans la recherche d’objets de code ou de base de données. Ceci permet finalement de n’avoir à se concentrer quasiment que sur la logique à implémenter.
Le gestionnaire de snippets
Comme nous l’avons vu plus haut, SQL Complete est livré avec un ensemble de snippets. Il est en plus possible de les éditer et d’en créer de nouveaux, à l’aide du gestionnaire, que l’on obtient en choisissant l’option Snippets Manager du menu SQL Complete, dans la barre de menus. Voici l’interface obtenue :
L’interface est sobre mais bien conçue, puisqu’on peut :
- - Consulter la liste des snippets disponibles
– Éditer les snippets existants, de façon à ce qu’ils suivent un formatage particulier
– Utiliser des variables prédéfinies, comme DATE, TIME, USER, SERVER, DB, ce qui permet par exemple de faciliter l’écriture d’en-têtes de modules T-SQL, ou de scripts
– Organiser les snippets par dossier
– Créer ses propres paramètres fictifs, ou en créer de nouveaux, qui sont attachés à un snippet particulier
– Partager un snippet sur Devart
Par ailleurs les snippets fournis par Devart sont très complets, comme l’illustre la capture d’écran ci-dessus pour le snippet nommé CreateDatabase. Enfin, les snippets sont stockés sous la forme de fichiers XML portant l’extension .snippet, dont l’emplacement est affiché en bas de l’interface : ceci rend le partage de snippets entre collaborateurs très facile.
Aide au formatage
Parmi les options que l’on trouve après avoir suivi SQL Complete > Options depuis la barre de menus, on remarque qu’il est possible de créer, éditer et partage des profils de formatage :
Si l’on clique sur le bouton Edit Profile …, on obtient une interface encore une fois sobre mais efficace, et surtout exhaustive :
Tous les aspects de la puissance du langage T-SQL sont abordés, et on peut aller de la place et l’alignement des mots-clé aux lignes d’intervalle ou indentations entre les instructions. On peut donc paramétrer le formateur pour qu’il nous obéisse au doigt et à l’œil. De retour dans une fenêtre, l’application du formatage se fait de façon intuitive, par un simple clic-droit sur l’ensemble de requêtes à formater :
Et l’on obtient immédiatement :
Import et export des paramètres
L’uniformisation de l’utilisation d’un standard de codage parmi toutes les personnes qui doivent écrire du code T-SQL dans l’entreprise est facilité par l’export de cet ensemble de paramètres, qui comprend ceux de l’interface et ceux de formate, mais pas les snippets. Cependant pour ces derniers, comme nous l’avons vu, il est facile de les trouver puisqu’ils sont stockés sous la forme de fichiers XML portant l’extension .snippet : leur emplacement est affiché en bas de l’interface de gestion des snippets.
On accède comme d’habitude à cette option en suivant SQL Complete > Import and Export Settings
L’utilisation de l’interface étant triviale, je passe sur les détails :
Une fonctionnalité intéressante non seulement pour partager les paramètres avec ses collègues, mais aussi pour en réaliser une sauvegarde et faciliter un changement de PC.
Conclusion
Devart dbForce SQL Complete est un outil extrêmement complet qui, dès qu’on commence à l’utiliser, fait rapidement oublier les insuffisances de l’intégration d’IntelliSense à SQL Server Management Studio. En plus de faciliter l’écriture de code, il permet de renforcer les standards de codage d’une équipe de développement par la possibilité de formater automatiquement et avec une précision chirurgicale du code T-SQL, et d’échanger ce formatage de façon aisée par un simple import / export. L’utilité des snippets et indiscutable, et la gestion proposée par ce plugin est supérieure encore une fois à ce qu’offre SQL Server Management Studio 2012.
On ne peut donc que féliciter Devart pour la qualité irréprochable de ce produit, qui est d’ailleurs décliné pour MySQL, Oracle, et bientôt PostGre SQL. Par ailleurs Devart offre d’autres produits, comme des pilotes pour l’accès aux base de données, et des solutions d’aide au développement par ORM ou avec Delphi.
Je teste la version gratuite depuis plusieurs jours. L’avantage de cette version par rapport à l’intellisense de SMS, c’est qu’il est possible de mettre à jour le cache très facilement…
Grand avantage lors de création de tables… et développements de requêtes …
Pour information, je développe dans en environnement BI.
Bonjour,
J’utilise la version gratuite tous les jours et elle est bien meilleure qu’IntelliSense. La recherche des objets et l’auto-complétion sont bien plus intuitives.
Pouvez-vous décrire plus en détails votre remarque ?
A+
Comme je le disais, cela vient probablement de moi.
Là je l’ai déjà désinstallée mais du peu que je l’ai testée, c’était assez kif-kif par rapport à l’intellisense.
Comme avec cette dernière, parfois ça s’affichait, parfois ça ne s’affichait pas (souvent après un rafraîchissement des données il me semble).
Au niveau de la recherche d’objets, je pense que j’ai nettement moins d’objets à gérer que vous, du coup ça n’apporte pas vraiment quelque chose en plus que l’intellisense. Les noms de mes objets, je les connais ^^.
En ce qui concerne le problème d’affichage, il est effectivement nécessaire d’attendre quel le cache se rafraîchisse, ce qui se fait le plus souvent automatiquement lors du changement de contexte de base de données. Il arrive cependant qu’après la création d’un objet, on le ne le trouve pas dans la liste : dans ce cas un CTRL + SHIFT + R fait très bien le travail. Il faut attendre que la barre de progression qui s’affiche dans la barre de statut ait disparu
En ce qui concerne le nombre d’objets, je travaille sur des bases de données qui comportent au moins un millier de tables, le plus grand nombre étant environ 5000. On imagine facilement le nombre de vues et procédures stockées qui en découlent, et dans ce cas j’ai trouvé IntelliSense insuffisant, mais je comprends qu’avec peu de tables il puisse convenir.
Il n’en reste pas moins qu’au niveau des fonctions natives (CHARINDEX(), SUBSTRING(), POWER(), …, et fonctions de date surtout), la documentation dans l’infobulle évite d’avoir à consulter l’aide en ligne. Il est possible aussi de formater la casse de fonctions, et les parenthèses sont automatiquement ajoutées. Ce n’est pas grand chose, mais répété des milliers de fois, c’est appréciable
A+
Je vais lui redonner une chance car l’intellisense m’excède particulièrement ce matin (mais je suis levé du mauvaise pied faut dire).
Bon bin je teste la version gratuite depuis 3 jours et cela vient peut-être de moi ou du fait que ce soit la version gratuite mais je rencontre exactement les mêmes inconvéniants qu’avec l’intellisense de SSMS.
Rien de super dérangeant en soi mais si c’est pour avoir la même expérience d’utilisation avec l’un ou l’autre, autant ne pas surcharger le système avec un tool en plus.