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

Guide Pratique de téléphonie d’entreprise avec Teams
Ajouter un onglet téléphonie à Microsoft Teams pour émettre et recevoir des appels depuis n’importe quel terminal connecté. Découvrez dans ce guide pratique, comment bénéficier des avantages de l’offre TeamsPhony pour faire des économies, gagner en agilité et en simplicité avec une offre de téléphonie dans le cloud.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Euclyde Datacenters, un fort positionnement sur le marché des datacenters souverains
- Top 6 des Enjeux de la Sécurité du Cloud
- Le secret de la réussite industrielle ? De l’audace, de l’audace et encore de l’audace
- Les avantages de la norme WebAuthn
- L’urgence de faire converger Observabilité et Sécurité
