La procédure stockée procXTabDSQL, que montre le listing 4, utilise la vue vwSales2 et un curseur local qui se déplace en boucle dans une liste de noms de magasins pour générer une chaîne de requête crosstab. La chaîne de requête commence avec l'en-tête de ligne comme première colonne. La procédure
Avec Dynamic SQL
ouvre ensuite le curseur sur
la liste des noms de magasins. Le curseur
atteint les noms de magasins individuels
dans la variable @StoreName.
Chaque itération génère une chaîne
contenant une fonction SUM() qui entoure
une expression CASE, puis
concatène cette chaîne à la variable
varchar @strSQL. Chaque fonction
SUM() génère une colonne de sortie
dans le rapport final.
L’expression CASE dans la première
fonction SUM() concerne la
colonne bookstore de Barnum du rapport.
SQL Server interprète l’apostrophe
de « Barnum’s » comme délimiteur
de la chaîne de comparaison et
essaie de comparer les données stockées
dans stor_name à Barnum au lieu
de Barnum’s. Pour corriger ce problème,
le code doit remplacer le guillemet
simple dans le nom par deux
guillemets simples. Le premier
guillemet dans une suite doublesimple
-guillemet est considéré
comme le caractère d’échappement
pour le second guillemet ; il ordonne à l’analyseur syntaxique de chaîne SQL
Server d’interpréter le second guillemet
comme un caractère et pas
comme un délimiteur de chaîne.
L’apostrophe dans le libellé de colonne
[Barnum’s] est acceptable parce que
c’est un libellé de colonne imbriqué
dans des crochets de colonne. Le listing
2 contient l’expression CASE correcte
pour la colonne Barnum’s du
rapport.
Les choses se compliquent quand
on essaie de générer cette requête SQL
à partir d’une chaîne elle-même délimitée
par des guillemets simples. Il
faut fournir une séquence d’échappement
pour les guillemets simples qui
commencent et terminent la chaîne de
comparaison. La chaîne de comparaison
est contenue dans une variable,
donc il faut par programme remplacer
son guillemet simple par deux guillemets
simples en utilisant une fonction
REPLACE(). Malheureusement, la fonction
REPLACE() utilise aussi des guillemets
simples comme délimiteurs de
chaîne pour ses arguments string-literal.
Donc, pour remplacer un guillemet
simple par deux guillemets simples
dans la variable @StoreName, il faut
utiliser l’étrange syntaxe que voici
REPLACE(@StoreName,'''', '''''')
La valeur ASCII du guillemet
simple est 39. Pour améliorer la lisibilité
des expressions CASE dans le code
du listing 4, j’utilise sélectivement
CHAR(39) à la place de certains des
guillemets simples.
Une fois que le code a fini son
circuit en boucle au travers des noms
de magasins, il concatène le reste de la
chaîne SQL à la variable varchar. Quand
la chaîne SQL pour la requête crosstab
est terminée, le code appelle la procédure
EXECUTE pour générer l’ensemble
de résultats crosstab.
Téléchargez cette ressource
Mac en entreprise : le levier d’un poste de travail moderne
Ce livre blanc répond aux 9 questions clés des entreprises sur l’intégration du Mac : sécurité, compatibilité, gestion, productivité, coûts, attractivité talents, RSE et IA, et l’accompagnement sur mesure proposé par inmac wstore.
Les articles les plus consultés
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Cybersécurité Active Directory et les attaques de nouvelle génération
- Activer la mise en veille prolongée dans Windows 10
- Une baie de stockage c’est quoi ?
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
Les plus consultés sur iTPro.fr
- Analyse Patch Tuesday Mars 2026
- Une nouvelle ère de la modernisation du mainframe
- Akamai Technologies déploie sa stratégie de protection en ligne
- Baromètre channel IT : fin du cuivre, essor de UCaaS et premiers pas vers l’IA
Articles les + lus
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
Moderniser le développement logiciel : de la fragmentation à l’intégration
Analyse Patch Tuesday Mars 2026
Une nouvelle ère de la modernisation du mainframe
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
À la une de la chaîne Tech
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
- Moderniser le développement logiciel : de la fragmentation à l’intégration
- Analyse Patch Tuesday Mars 2026
- Une nouvelle ère de la modernisation du mainframe
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
