> Tech > UDF renvoyant une table

UDF renvoyant une table

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

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

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

Préparer l’entreprise aux technologies interconnectées

Préparer l’entreprise aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010