SQL Server 2016 : Les nouveautés

Aborder les fonctions de manipulation de chaînes

Testez gratuitement nos 1333 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Prenez en main les deux nouvelles fonctions string_split et string_escape. Elles vous permettent d'améliorer la manipulation de vos chaînes en Transact-SQL.
08:09

Transcription

Voyons enfin 2 nouveautés qui concernent les chaînes de caractère. Il y a 2 fonctions ajoutées, qui sont « String_Split » et « String_Escape ». Alors d'abord String_Split: Si vous êtes familier avec un langage de programmation, vous êtes déjà en train de comprendre de quoi il s'agit. Et si vous connaissez bien Transact SQL, si vous développez en SQL Server depuis quelque temps, eh bien, tout à coup dans votre esprit peut-être, qu'il y a quelque chose qui s'allume et qui se dit : « Bon sang enfin ! Quel est le besoin ? » On a souvent à manipuler des chaînes qui contiennent une liste comme celle-ci. Une liste, ou un tableau. Ici, j'ai 1 , 2 , 3, 4 etc. Par exemple, quelque chose qui est envoyé en paramètres à une procédure stoquée. Une liste de numéros à chercher, une liste de codes de pays ... voilà. Très très souvent, on a besoin de gérer ce genre de choses. Quand on a besoin de les gérer, on veut découper cette chaîne et retourner chaque valeur par exemple dans une table, avec chaque valeur dans une ligne différente. Et bien évidement le « SPLIT » c'est tout à fait le type de fonction qui fait ça. on découpe la chaîne, en indiquant quel est le séparateur, ici c'est la virgule. Et donc vous avez compris, c'est exactement ce que fait String_Split. Cette chaîne, qui est passée en premier paramètre, va être découpée en prenant en compte le séparateur qui est le 2e paramètre de la fonction. Comme on va découper, on va retourner plusieurs lignes donc, il est logique que comme vous le voyez, ce String_Split retourne une table, et donc c'est une fonction de petites tables, et elle est donc utlisée dans un « FROM ». Je fais un « Select * », sur le résultat de mon String_Split, on va voir ce que ça donne, et, 1 2 3 4 5 , j'ai une table que je vais pouvoir manipuler directement. Alors juste une note, je l'ai mise ici en commentaire, il faut que le niveau de compatibilité de votre base de données, soit en 130. c'est-à-dire, si vous avez restauré une base de données d'une version antérieure, et que ici, le niveau de compatibilité n'est pas SQL server 2016, mais 2014 par exemple, et bien String_Split ne va pas fonctionner et ne sera pas reconnu, il faut absolument que vous soyez dans un niveau de compatibilté 2016 au minimum, pour le futur. Voilà qui marche à nouveau. Donc c'est très très pratique, Ça va vous permettre de résoudre plein de problèmes que vous aviez auparavant, besoin de résoudre avec des boucles, avec du code clr avec un comportement relationnel avec des tables de nombres, par exemple, des Timetables, et la beauté de cette solution c'est que, comme c'est une variable de type table, on peut l'utiliser comme je le fais ici dans une jointure, en fait dans un cross-apply, ici, je vais récupérer, vous allez voir. De ma table contacts, le contact ID est l'email. Donc j'ai une liste de contact ID, et d'emails. Et je vais un cross apply avec mon string_split, pour dire : « Prends l'email, et tu le sépares à l'@ ». Donc, le Cross apply, c'est une syntaxe que vous connaissez peut-être, qui permet d'appliquer une fonction à une table dans un « FROM », ce que je dis c'est que : « Prends-moi tous les contacts, et ensuite, pour chaque ligne de contact, tu vas appliquer la fonction ». En récupérant du contact, l'email, en faisant un split sur l'@, et puis, vous vous souvenez, ici, le résultat me retourne toujours une colonne qui s'appelle « value », donc, je vais récupérer aussi l'information de « value ». J'ai rajouté le contact id et l'email pour bien voir qu'on va découper et donc on va multiplier finallement le nombre de contacts par le nombre de Splits qu'on a réalisés. On aura 2 fois chaque contact, puisqu'on aura 2 lignes à retourner par contact - Ce qu'il y a avant l'@ et ce qu'il a après. Donc par exemple, pour mon contact 1, ici, je vais avoir l'email 2 fois bien sûr puisqu'il vient de la table contact, et je vais avoir le « value » avant l'@, après l'@, CQFD. Donc c'est très très très pratique. Au passage je me suis posé la question : parce que j'ai l'habitude, en SQL Server 2012, il y avait une nouvelle fonction comme « format » par exemple, qui permet de formatter des dates et des nombres, par exemple, avec une culture. C'est-à-dire un environnement comme le Français de France ou l'Anglais Américain, et, parce qu' il y avait une culture, et parce que c'était relativement compliqué, Microsoft a développé cette fonction format en « .net ». et donc ça veut dire que chaque fois qu'on utilise la fonction Format dans du code, on appelle le « clr » derrière. Common Language Run Time. Alors je me suis dit, est-ce qu'il ont fait la même chose pour String_Split, ou est-ce qu'ils l'ont vraiment développé nativement ? J'aimerais bien qu'ils le développent nativement et qu'ils n'utilisent pas « .net », parce que ça a un impact en performance. Et donc j'ai vérifié, en utilisant « query stats », et en cherchant donc, des statistiques en mémoire d'éxécution de ma requête, C'était une bonne surprise, parce que voici la requête, avec mon Cross apply, elle a pris ici, ceci en termes de Worker time c'est à dire de temps CPU, elle a bossé un petit peu quand même, on est d'accord, mais, j'ai 0 Clr time, c'est-à-dire qu'elle n'a pas dépensé de temps en « .net ». Ce n'est donc pas une fonction « .net ». c'est une fonction nativement implémentée, en C++, ou en C probablement. Donc les performances devraient être relativement correctes, même si on voit que ça dépense un petit peu de CPU pour faire son travail, ce qui est normal, le Split il faut quand même bosser, et puis là, j'ai eu 20 000 lignes de résultats, donc c'était pas mal. 2e fonction : «S tring_Escape », qui va nous servir principalement, ou même exclusivement pour traviller avec du « json ». On va voir le travail de « json » avec SQL Server, donc du « JSON », Java Sculpt Object Notation, et l'idée c'est de pouvoir prendre une valeur et de pouvoir la préparer pour être intégrée dans un document « json ». En faisant de l'escape. Donc, un certain nombre de caractères spéciaux ne sont pas acceptés dans un document « json », et bien String_Escape va simplement transformer ces caractères spéciaux en des représentations avec un « / », de façon à pouvoir les intégrer dans du « json ». C'est donc une fonction de formattage, pour en entrée avoir n'importe quel type de chaîne et en sortie, pouvoir l'intégrer sans aucun problème, dans du « json ». Je vous ai montré ici un exemple, j'ai pas la variable Name et Surname, ici, donc, je ne vais pas l'éxécuter, mais l'exemple est parlant, parce qu'il y a aussi une fonction qui a légèrement été modifiée qui s'appelle Format message, qui existe depuis longtemps et qui permet de formatter des messages d'erreur, mais, cette fonction a été modifiée parce que vous voyez, je passe en 1er paramètre du « json ». Donc cette fonction a été modifiée pour pouvoir mieux travailler avec du « json ». Et ici, je place des variables positionnelles en disant, et bien ça, c'est du numérique, ça, c'est du String, c'est quelque chose que vous connaissez sans doute, si vous développez avec un langage comme Java, ou C Sharp, qui a tout à fait ce type de fonctionnalité. On prend une chaîne de base, et puis on lui dit, ici, on va ajouter des informations, de certains types, à telles positions. Ensuite, on met la virgule pour les paramètres suivants, et on va mettre 17, qui viendra se positionner ici, on va faire un string_escape du nom et on va le positionner ici, et on va un String Escape du Surname, ici, qu'on va positionner, ici. Donc on est presque avec ça, dans un langage comme C sharp, on a un peu plus de souplesse, pour créer des chaînes en « json », donc pour pouvoir manipuler du « json » dans SQL Server.

SQL Server 2016 : Les nouveautés

Découvrez les nouveautés de SQL Server 2016. Voyez les options de configuration limitées aux bases de données, le chiffrage de données à partir des applications clientes, etc.

2h26 (27 vidéos)
Aucun commentaire n´est disponible actuellement
 

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !