{"id":9207,"date":"2022-07-13T09:06:22","date_gmt":"2022-07-13T08:06:22","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=9207"},"modified":"2022-08-09T08:17:46","modified_gmt":"2022-08-09T07:17:46","slug":"les-nouveautes-de-sql-server-2022","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/","title":{"rendered":"Les nouveaut\u00e9s de SQL Server 2022"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207&#038;title=Les%20nouveaut%C3%A9s%20de%20SQL%20Server%202022\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Les%20nouveaut%C3%A9s%20de%20SQL%20Server%202022&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>Microsoft ne se repose jamais sur ses lauriers, et les nouvelles fonctionnalit\u00e9s continuent d&#8217;arriver, que \u00e7a soit en PaaS ou avec le produit On-Prem. Dans SQL 2022, Microsoft continue d&#8217;int\u00e9grer des nouvelles fonctionnalit\u00e9s d&#8217;int\u00e9gration au cloud Azure, mais pas que&#8230; Nous allons faire une revue de ce \u00e0 quoi s&#8217;attendre, et pourquoi c&#8217;est int\u00e9ressant.<\/p>\n<p>Cette liste n&#8217;est pas 100% exhaustive et se focalise sur les \u00e9l\u00e9ments essentiels.<\/p>\n<p>&nbsp;<\/p>\n<h1>Compatibilit\u00e9 avec le stockage S3 pour les backups et Polybase :<\/h1>\n<p>Le stockage S3 est principalement connu par les utilisateurs du cloud AWS. Cependant, cette technologie est utilisable autrement : dans des SAN\/NAS compatibles, et par des composants logiciels OpenSource tels que Min.IO ( <a href=\"https:\/\/min.io\/\">https:\/\/min.io\/<\/a> ).<\/p>\n<p>On peut donc d\u00e9sormais faire des BACKUP TO URL non plus seulement vers un storage account d\u2019Azure, mais \u00e9galement vers un bucket S3 Amazon. Si on a un stockage S3 customis\u00e9, on peut \u00e9galement s\u2019en servir.<\/p>\n<p>Mais ce n\u2019est pas tout : le stockage S3 peut aussi \u00eatre utilis\u00e9 pour Polybase et ses capacit\u00e9s de Big Data. En plus de la capacit\u00e9 de connexion \u00e0 un stockage S3, le support des fichiers <em>parquets<\/em> (ces fichiers de stockage vertical de donn\u00e9es, compress\u00e9s et structur\u00e9s : <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Apache_Parquet\">https:\/\/fr.wikipedia.org\/wiki\/Apache_Parquet<\/a> ).<\/p>\n<p>Un article viendra prochainement expliquer comment interroger ces donn\u00e9es avec Polybase et un S3 customis\u00e9.<\/p>\n<p>&nbsp;<\/p>\n<h1>Groupe de disponibilit\u00e9 distribu\u00e9 avec le PaaS Managed Instance dans Azure :<\/h1>\n<p>Les groupes de disponibilit\u00e9s sont traditionnellement utilis\u00e9s pour de la haute-disponibilit\u00e9 sur des configurations On-Prem. Mais certains outils analytiques sont pr\u00e9sents dans Azure et pourraient vous int\u00e9resser, sans pour autant vouloir d\u00e9porter toute votre configuration dans le cloud.<\/p>\n<p>Il est donc d\u00e9sormais possible de monter une Managed Instance dans Azure (PaaS, donc), et l\u2019int\u00e9grer comme un r\u00e9plica de votre configuration AlwaysOn. Vous pourrez l\u2019utiliser en lecture seule pour les outils analytiques tels qu\u2019Azure Synapse.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-9215 aligncenter\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql2022_1-300x143.png\" alt=\"\" width=\"694\" height=\"331\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql2022_1-300x143.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql2022_1-768x365.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql2022_1.png 945w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Am\u00e9liorations des groupes de disponibilit\u00e9 AlwaysOn :<\/h1>\n<h2 style=\"padding-left: 40px;\">Groupe de disponibilit\u00e9 autonome (contained Availability Groups)<\/h2>\n<p>Selon moi l\u2019une des nouveaut\u00e9s les plus sympa ! Attention, rien \u00e0 voir les technologie Docker &amp; Cie&#8230; : il s&#8217;agit de la capacit\u00e9 \u00e0 conteneuriser \u00e0 l\u2019int\u00e9rieur d\u2019une base dans un groupe de disponibilit\u00e9 certains objets qui traditionnellement sont au niveau de l\u2019instance : <span style=\"text-decoration: underline;\">les logins et les jobs en particulier<\/span>\u00a0! Ainsi, il n\u2019y aura plus \u00e0 d\u00e9ployer sur tous les r\u00e9plicas vos jobs applicatifs en ajoutant une logique de d\u00e9tection du r\u00f4le du r\u00e9plica (principal ou secondaire). Les d\u00e9ploiements sont simplifi\u00e9s, leur ex\u00e9cution \u00e9galement.<\/p>\n<h2 style=\"padding-left: 40px;\">Connexions TCP multiples<\/h2>\n<p>La synchronisation entre les r\u00e9plicas pourra se faire dans plus d\u2019une connexion, pour parall\u00e9liser les \u00e9changes. Cela est utile quand les r\u00e9plicas sont sur des liaisons r\u00e9seaux distantes (par exemple un r\u00e9plica Managed Instance dans Azure), en augmentant le d\u00e9bit malgr\u00e9 une latence r\u00e9seau \u00e9lev\u00e9e.<\/p>\n<h2 style=\"padding-left: 40px;\">Parallel redo<\/h2>\n<p>Pour fonctionner avec ces connexions TCP multiples, le Redo Thread a \u00e9t\u00e9 optimis\u00e9 pour fonctionner en parall\u00e8le, par base, tout cela derri\u00e8re un seul latch pour augmenter la vitesse d\u2019application. Cela fonctionne dans le cadre de la synchro AlwaysOn, mais \u00e9galement pour la r\u00e9cup\u00e9ration en cas de crash.<\/p>\n<h1>Am\u00e9liorations du Query Store\u00a0:<\/h1>\n<h2 style=\"padding-left: 40px;\">Disponibilit\u00e9 du QS sur les r\u00e9plicas secondaires dans une configuration AlwaysOn\u00a0:<\/h2>\n<p>Dans le cadre d\u2019un AlwaysOn o\u00f9 le r\u00e9plica secondaire est utilis\u00e9 pour de la lecture seule, les requ\u00eates ex\u00e9cut\u00e9es sur celui-ci seront enregistr\u00e9es dans le Query Store en \u00e9tant transmises au r\u00e9plica principal. Enfin des possibilit\u00e9s d\u2019analyse de performances sur les r\u00e9plicas d\u00e9di\u00e9s \u00e0 du reporting\u00a0!<\/p>\n<h2 style=\"padding-left: 40px;\">Query Store Hints<\/h2>\n<p>Dans le cas o\u00f9 l\u2019on aper\u00e7oit des requ\u00eates dans le Query Store qui n\u00e9cessiterait une optimisation passant par un hint ( OPTION(\u2026) \u00e0 la fin de la requ\u00eate), mais o\u00f9 la modification du code n\u2019est pas ais\u00e9e (parce que c\u2019est un logiciel \u00ab\u00a0\u00e9diteur\u00a0\u00bb et que les modifications du code ne sont pas accept\u00e9es\/possibles, parce que le processus de validation des changements du code applicatif sont longs etc\u2026), il est d\u00e9sormais possible d\u2019attraper un plan d\u2019ex\u00e9cution et lui forcer un hint.<\/p>\n<p>On peut ainsi forcer des actions du type\u00a0:<\/p>\n<ul>\n<li>Recompilation \u00e0 chaque ex\u00e9cution du code<\/li>\n<li>Limitation du memory grant<\/li>\n<li>Limitation du degr\u00e9 de parall\u00e9lisme<\/li>\n<li>D\u00e9sactivation du \u00ab\u00a0Row Goal\u00a0\u00bb dans les requ\u00eates \u00ab\u00a0TOP\u00a0\u00bb<\/li>\n<li>For\u00e7age d\u2019un type de jointure (hash au lieu de loop par exemple)<\/li>\n<li>Forcer un niveau de compatibilit\u00e9 (110 au lieu de 160 par exemple).<\/li>\n<li>Forcer l\u2019option \u00ab\u00a0legacy cardinality estimator\u00a0\u00bb<\/li>\n<li>Forcer la cardinalit\u00e9 moyenne sur toutes les valeurs d\u2019un pr\u00e9dicat<\/li>\n<\/ul>\n<h2 style=\"padding-left: 40px;\">Memory Grants Feedback bas\u00e9 sur le QS<\/h2>\n<p>Il s\u2019agit d\u2019une am\u00e9lioration es MGF qu\u2019on trouvait d\u00e9j\u00e0 en SQL 2019, mais qui seront d\u00e9sormais bas\u00e9s sur les donn\u00e9es cumul\u00e9es sur une dur\u00e9e longue avec le Query Store, plut\u00f4t que juste le cache des plans d\u2019ex\u00e9cution.<\/p>\n<p>Il est d\u00e9sormais aussi possible de fixer de mani\u00e8re persistante un memory grant.<\/p>\n<p>Un nouvel algorithme d\u2019estimation du memory grant bas\u00e9 non plus juste sur la valeur du dernier plan, mais sur un calcul bas\u00e9 sur les variations des memory grants pr\u00e9c\u00e9dents.<\/p>\n<h2 style=\"padding-left: 40px;\">DOP Feedback<\/h2>\n<p>SQL Server propose par l\u2019option DOP_FEEDBACK d\u2019ajuster automatiquement le niveau de parall\u00e9lisme de certaines requ\u00eates se r\u00e9p\u00e9tant souvent pour trouver les performances les plus rapides.<\/p>\n<h2 style=\"padding-left: 40px;\">Cardinality Estimator Feedback<\/h2>\n<p>Enorme promesse de SQL Server\u00a0: la capacit\u00e9 \u00e0 identifier quand il y a un \u00e9cart significatif d\u2019estimation de cardinalit\u00e9, et de modifier les plans d\u2019ex\u00e9cution \u00e0 la vol\u00e9e.<\/p>\n<h2 style=\"padding-left: 40px;\">Optimized Plan Forcing<\/h2>\n<p>Dans le cas d\u2019un usage de plans forc\u00e9s par le Query Store, un nouveau m\u00e9canisme de \u00ab\u00a0pre-caching\u00a0\u00bb est en place afin de gagner du temps d\u2019ex\u00e9cution.<\/p>\n<p>&nbsp;<\/p>\n<h1>Ledger<\/h1>\n<p>Un peu la r\u00e9ponse de Microsoft aux probl\u00e9matiques qu\u2019essaie de r\u00e9soudre la Blockchain\u00a0: les donn\u00e9es sont consid\u00e9r\u00e9es comme inalt\u00e9rables, car les lignes sont ajout\u00e9es en se basant sur une valeur cryptographique des pr\u00e9c\u00e9dentes lignes.<\/p>\n<p>Se veut moins gourmande en \u00e9nergie que la plupart des blockchains, mais n\u2019est pas d\u00e9centralis\u00e9e comme peuvent l\u2019\u00eatre traditionnellement les blockchains.<\/p>\n<p>&nbsp;<\/p>\n<h1>Support d&#8217;Azure Active Directory<\/h1>\n<p>On peut d\u00e9sormais simplifier l\u2019authentification si l\u2019on a un tenant Azure Active Directory en s\u2019en servant comme r\u00e9f\u00e9rentiel. Plus besoin de contr\u00f4leur de domaine\u00a0!<\/p>\n<p>&nbsp;<\/p>\n<h1>Always Encrypted avec &#8220;secure enclaves&#8221;<\/h1>\n<p>Certaines op\u00e9rations SQL \u00e9taient impossible \u00e0 r\u00e9aliser de mani\u00e8re compl\u00e8tement s\u00e9curis\u00e9 avec AlwaysEncrypted (telles que des jointures ou des agr\u00e9gations). D\u00e9sormais, avec les \u00ab secures enclaves \u00bb si le CPU supporte Intel SGX, il est possible de r\u00e9aliser ces op\u00e9rations dans un contexte compl\u00e8tement s\u00e9curis\u00e9 ET multi-thread.<\/p>\n<p>&nbsp;<\/p>\n<h1>Nouveaux r\u00f4les serveurs<\/h1>\n<p>Les r\u00f4les serveurs suivants ont \u00e9t\u00e9 ajout\u00e9s\u00a0:<\/p>\n<p><strong>##MS_DatabaseConnector##\u00a0<\/strong>: Peut se connecter avec un login mais pas de user.<\/p>\n<p><strong>##MS_DatabaseManager##\u00a0<\/strong>: Peut cr\u00e9er et droper des bases de donn\u00e9es. L\u2019utilisateur qui a cr\u00e9\u00e9 sa base en devient le propri\u00e9taire et peut se connecter sans login en tant que dbo.<\/p>\n<p><strong>##MS_DefinitionReader##\u00a0<\/strong>: Peut lire toutes les vues des catalogues.<\/p>\n<p><strong>##MS_LoginManager##\u00a0<\/strong>: Peut cr\u00e9er et supprimer des logins.<\/p>\n<p><strong>##MS_SecurityDefinitionReader##\u00a0<\/strong>:\u00a0peut acc\u00e9der aux vues des catalogues, mais uniquement celles couvertes par VIEW ANY SECURITY DEFINITION.<\/p>\n<p><strong>##MS_ServerStateReader##<\/strong>\u00a0:\u00a0 un r\u00f4le qui remplace le traditionnel GRANT VIEW SERVER STATE<\/p>\n<p><strong>##MS_ServerStateManager##\u00a0<\/strong>: Le m\u00eame que ServerStateReader mais dispose en plus du ALTER SERVER STATE.<\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<h1>Ordered clustered columnstore index<\/h1>\n<p>Possibilit\u00e9 d\u00e9sormais de d\u00e9finir un ordre de tri pour les Cluster ColumnStore Index, am\u00e9liorant du coup l\u2019efficacit\u00e9 de la compression et donc des performances en lecture.<\/p>\n<h1>Compression XML<\/h1>\n<p>Capacit\u00e9 \u00e0 compresser les donn\u00e9es et les index sur des colonnes de types XML.<\/p>\n<h1>Support AVX-512<\/h1>\n<p>Pour les plans d\u2019ex\u00e9cution en mode \u00ab\u00a0batch\u00a0\u00bb, les CPU disposant du jeu d\u2019instruction AVX-512 voient leur performance am\u00e9lior\u00e9es.<\/p>\n<h1>Acc\u00e8s concurrents GAM\/SGAM pour les bases utilisateurs en plus de la TempDb<\/h1>\n<p>Apr\u00e8s avoir am\u00e9lior\u00e9 les m\u00e9canismes de verrouillages GAM\/SGAM de la TempDb en SQL 2019, SQL 2022 propose d\u2019am\u00e9liorer encore ces all\u00e9gements de latches sur les bases utilisateurs.<\/p>\n<h1>Buffer pool parallel scan<\/h1>\n<p>Am\u00e9lioration des performances dans le cas de requ\u00eates avec de gros scans dans le buffer en autorisant la parall\u00e9lisation.<\/p>\n<h1>Gestion manuelle des snapshots pour les backups sans client VDI.<\/h1>\n<p>Si le stockage est compatible, il est possible de s\u00e9quencer des op\u00e9rations de backups SQL (BACKUP DATABASE \/ BACKUP LOG) avec des freezes de stockages pour faire des sauvegardes extr\u00eamement rapides. Cela n\u00e9cessite des actions crois\u00e9es SQL \/ OS-Stockage, mais permet de se passer d\u2019un logiciel de backup tiers.<\/p>\n<h1>Ajout de fonctions<\/h1>\n<ul>\n<li><strong>DATE_BUCKET()<\/strong><\/li>\n<\/ul>\n<p>Permet de trouver le premier \u00e9l\u00e9ment d\u2019une s\u00e9rie de date. Par exemple:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SELECT DATE_BUCKET(WEEK, 1, getdate()); <\/pre>\n<p>Cela retournera la date du premier jour de la semaine courante.<\/p>\n<ul>\n<li><strong>GENERATE_SERIES()\u00a0:<\/strong><\/li>\n<\/ul>\n<p>Permet de g\u00e9n\u00e9rer une s\u00e9rie de valeur. Par exemple :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SELECT value FROM GENERATE_SERIES(START = 1, STOP = 10, STEP = 1); <\/pre>\n<p>Cela\u00a0 va retourner une s\u00e9rie de 10 valeur incr\u00e9ment\u00e9e de 1 \u00e0 chaque fois.<\/p>\n<ul>\n<li><strong>FIRST_VALUE() \/ LAST_VALUE()<\/strong><\/li>\n<\/ul>\n<p>Permet de retrouver la premi\u00e8re ou la derni\u00e8re valeur d\u2019un agr\u00e9gat. Par exemple avec la base d\u2019exemple Microsoft :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">USE AdventureWorks2012;\r\n\r\nGO\r\n\r\nSELECT Name, ListPrice, FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive\r\n\r\nFROM Production.Product\r\n\r\nWHERE ProductSubcategoryID = 37; <\/pre>\n<p>Cela renvoie :<\/p>\n<table style=\"height: 348px;\" width=\"441\">\n<tbody>\n<tr>\n<td width=\"129\">Name<\/td>\n<td width=\"80\">ListPrice<\/td>\n<td width=\"126\">LeastExpensive<\/td>\n<\/tr>\n<tr>\n<td>Patch Kit\/8 Patches<\/td>\n<td>2.29<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>Road Tire Tube<\/td>\n<td>3.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>Touring Tire Tube<\/td>\n<td>4.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>Mountain Tire Tube<\/td>\n<td>4.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>LL Road Tire<\/td>\n<td>21.49<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>ML Road Tire<\/td>\n<td>24.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>LL Mountain Tire<\/td>\n<td>24.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>Touring Tire<\/td>\n<td>28.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>ML Mountain Tire<\/td>\n<td>29.99<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>HL Road Tire<\/td>\n<td>32.60<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>HL Mountain Tire<\/td>\n<td>35.00<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>HL Road Tire<\/td>\n<td>32.60<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<tr>\n<td>HL Mountain Tire<\/td>\n<td>35.00<\/td>\n<td>Patch Kit\/8 Patches<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>La fonction LAST_VALUE() fait l\u2019inverse et renverrai donc l\u2019\u00e9l\u00e9ment le plus cher des Product (HL Mountain Tire).<\/p>\n<ul>\n<li><strong>GREATEST() \/ LEAST() :<\/strong><\/li>\n<\/ul>\n<p>Fait un peu la m\u00eame chose que FIRST_VALUE() \/ LEAST_VALUE(), mais avec une s\u00e9rie d\u2019expressions plut\u00f4t que le r\u00e9sultat d\u2019un agr\u00e9gat.<\/p>\n<p>Par exemple :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> select GREATEST(1,3,11) <\/pre>\n<p>renvoie 11.<\/p>\n<p>Avec des chaines de caract\u00e8res, ce sera l\u2019ordre alphab\u00e9tique qui sera utilis\u00e9 :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select GREATEST('truc', 'machin', 'chose') <\/pre>\n<p>renvoie \u00ab truc \u00bb.<\/p>\n<p>&nbsp;<\/p>\n<p>Bien entendu, LEAST() fait l\u2019inverse.<\/p>\n<p>&nbsp;<\/p>\n<p>Nous aurons l&#8217;occasion de d\u00e9tailler prochainement certaines fonctionnalit\u00e9s plus en d\u00e9tail dans des articles d\u00e9di\u00e9s.<\/p>\n<p>Vous pouvez commencer \u00e0 exp\u00e9rimenter la prochaine version de SQL Server ici : <a href=\"https:\/\/info.microsoft.com\/ww-landing-sql-server-2022.html\">https:\/\/info.microsoft.com\/ww-landing-sql-server-2022.html<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207&#038;title=Les%20nouveaut%C3%A9s%20de%20SQL%20Server%202022\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Les%20nouveaut%C3%A9s%20de%20SQL%20Server%202022&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9207\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Microsoft ne se repose jamais sur ses lauriers, et les nouvelles fonctionnalit\u00e9s continuent d&#8217;arriver, que \u00e7a soit en PaaS ou avec le produit On-Prem. Dans SQL 2022, Microsoft continue d&#8217;int\u00e9grer des nouvelles fonctionnalit\u00e9s d&#8217;int\u00e9gration au cloud Azure, mais pas que&#8230;&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":9231,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[302,409,408],"class_list":["post-9207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sqlserver","tag-query-store","tag-sql-2022","tag-sql-server-2022"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Microsoft ne se repose jamais sur ses lauriers, et les nouvelles fonctionnalit\u00e9s continuent d&#8217;arriver, que \u00e7a soit en PaaS ou avec le produit On-Prem. Dans SQL 2022, Microsoft continue d&#8217;int\u00e9grer des nouvelles fonctionnalit\u00e9s d&#8217;int\u00e9gration au cloud Azure, mais pas que&#8230;&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-13T08:06:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-09T07:17:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql-server-2022.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"181\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Capdata team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Capdata team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\"},\"author\":{\"name\":\"Capdata team\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9\"},\"headline\":\"Les nouveaut\u00e9s de SQL Server 2022\",\"datePublished\":\"2022-07-13T08:06:22+00:00\",\"dateModified\":\"2022-08-09T07:17:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\"},\"wordCount\":1849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"Query Store\",\"SQL 2022\",\"SQL Server 2022\"],\"articleSection\":[\"SQL Server\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\",\"name\":\"Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2022-07-13T08:06:22+00:00\",\"dateModified\":\"2022-08-09T07:17:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Les nouveaut\u00e9s de SQL Server 2022\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9\",\"name\":\"Capdata team\",\"sameAs\":[\"https:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/","og_locale":"fr_FR","og_type":"article","og_title":"Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG","og_description":"Microsoft ne se repose jamais sur ses lauriers, et les nouvelles fonctionnalit\u00e9s continuent d&#8217;arriver, que \u00e7a soit en PaaS ou avec le produit On-Prem. Dans SQL 2022, Microsoft continue d&#8217;int\u00e9grer des nouvelles fonctionnalit\u00e9s d&#8217;int\u00e9gration au cloud Azure, mais pas que&#8230;&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2022-07-13T08:06:22+00:00","article_modified_time":"2022-08-09T07:17:46+00:00","og_image":[{"width":400,"height":181,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2022\/07\/sql-server-2022.png","type":"image\/png"}],"author":"Capdata team","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Capdata team","Dur\u00e9e de lecture estim\u00e9e":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/"},"author":{"name":"Capdata team","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9"},"headline":"Les nouveaut\u00e9s de SQL Server 2022","datePublished":"2022-07-13T08:06:22+00:00","dateModified":"2022-08-09T07:17:46+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/"},"wordCount":1849,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["Query Store","SQL 2022","SQL Server 2022"],"articleSection":["SQL Server"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/","url":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/","name":"Les nouveaut\u00e9s de SQL Server 2022 - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2022-07-13T08:06:22+00:00","dateModified":"2022-08-09T07:17:46+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/les-nouveautes-de-sql-server-2022\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Les nouveaut\u00e9s de SQL Server 2022"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9","name":"Capdata team","sameAs":["https:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=9207"}],"version-history":[{"count":16,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9207\/revisions"}],"predecessor-version":[{"id":9228,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9207\/revisions\/9228"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/9231"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=9207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=9207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=9207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}