En plus des valeurs scalaires, les nouvelles UDF de SQL Server sont également
capables de renvoyer des valeurs bien plus intéressantes : des tables. Il est
possible de faire un JOIN sur une telle table, voire même de lui appliquer des
clauses WHERE.
L'utilisation d'une table comme valeur de
UDF renvoyant une table
retour est simple. Pour une UDF, une
table est semblable à tout autre type de données SQL Server, à l’exception du
fait que l’on doit d’une part, nommer la table, et d’autre part, définir les colonnes
(comme on le ferait pour une table temporaire). Pour illustrer ce point, construisons
une fonction simple qui renvoie une table contenant la liste des noms (nom de
famille et prénom) et des adresses de tous les auteurs de la base de données exemple
Pubs. Le listing 5 présente un exemple de solution ainsi qu’un exemple de requête
pour illustrer le type de contenu de table que renvoie la fonction. La table 1
présente une partie de ces résultats (j’ai supprimé le milieu dans un souci de
concision).
Tout ce qui a été fait jusqu’ici aurait pu être fait plus simplement avec une
vue. Mais supposons que l’on souhaite paramétrer une vue, et afficher uniquement
les auteurs ayant vendu un nombre minimum de livres. Avec une vue, on pourrait
joindre la requête à une autre table ou deux, mais cela deviendrait un peu verbeux,
complexe et difficilement lisible. Par ailleurs, il faudrait inclure dans la requête,
une colonne (la quantité vendue) qu’on ne veut pas nécessairement voir apparaître
dans le rapport résultant, puis utiliser une clause WHERE. Une vue et la requête
qui l’utilise pourraient ressembler au code présenté dans le listing 6. En simplifiant
les choses, on peut dire qu’on peut encapsuler ce que l’on veut dans une fonction,
comme le montre le listing 7.
A présent, la requête renvoyant la valeur désirée est simple :
SELECT *
FROM DBO.TABLEFUNCTION(25)
On peut réutiliser cette fonction sans avoir à la copier-coller. Remarquez également
que bien qu’une procédure cataloguée soit à même de produire des résultats similaires,
on ne pourrait pas joindre les résultats de cette dernière à une autre table.
Pour illustrer les avantages d’une UDF par rapport à une procédure cataloguée,
poussons notre exemple un peu plus loin. Supposons qu’un manager veuille un rapport
mentionnant l’auteur et l’éditeur de chaque livre qui s’est vendu à plus de 25
exemplaires. Si on utilise une procédure cataloguée, on ne peut pas joindre de
valeurs aux résultats sans passer par un processus laborieux, en plusieurs étapes.
Avec notre fonction, la jointure d’autres tables aux résultats est simple. Comme
on peut le voir dans le listing 8, la jointure des données à la fonction est aussi
simple que si la fonction était une table ou une vue. La seule véritable différence
est que je peux à présent utiliser un ou plusieurs paramètres au lieu d’une clause
WHERE.
Téléchargez cette ressource

État des lieux de la réponse à incident de cybersécurité
Les experts de Palo Alto Networks, Unit 42 et Forrester Research livrent dans ce webinaire exclusif leurs éclairages et stratégies en matière de réponses aux incidents. Bénéficiez d'un panorama complet du paysage actuel de la réponse aux incidents et de sa relation avec la continuité de l'activité, des défis auxquels font face les entreprises et des tendances majeures qui modèlent ce domaine. Un état des lieux précieux pour les décideurs et professionnels IT.
Les articles les plus consultés
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Les 6 étapes vers un diagnostic réussi
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Activer la mise en veille prolongée dans Windows 10
- Afficher les icônes cachées dans la barre de notification
Les plus consultés sur iTPro.fr
- L’informatique quantique redéfinit-elle les codes de la cybersécurité ?
- Adopter l’IA augmenterait le PIB mondial à l’horizon 2035
- Renouvellement des certificats SSL tous les 45 jours : une mise en œuvre impossible sans automatisation ?
- Palo Alto Networks s’engage sur la cyber solidarité
- Recrudescence des cyberattaques pilotées par l’IA
