Dans SQL Server, la fonction table en ligne est l'un des deux types de fonctions table Transact-SQL (l'autre type étant la fonction table multi-instructions).
Les fonctions table (TVF) sont un type de fonction définie par l'utilisateur qui renvoient leurs résultats sous forme de tableau. Ils peuvent donc être interrogés comme une table normale.
Les TVF en ligne (parfois appelées ITVF) n'ont pas de variables de retour associées. La valeur de retour est définie par un seul SELECT
déclaration. Cette instruction définit la structure de la table de retour. Cela contraste avec les TVF multi-instructions (également appelées MSTVF), qui nécessitent une variable de retour.
Les ITVF n'utilisent pas non plus le BEGIN
/END
syntaxe, qui est une autre chose qui les distingue des MSTVF.
Les TVF en ligne sont souvent considérées comme ayant de meilleures performances que les TVF multi-instructions, bien que cela dépende également de ce que vous essayez de faire dans la fonction.
Exemple de fonction de table en ligne
Voici un exemple d'ITF de base :
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int) RETURNS TABLE AS RETURN ( SELECT al.ArtistId, al.AlbumName, g.Genre FROM dbo.Albums al INNER JOIN dbo.Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON al.GenreId = g.GenreId WHERE al.ArtistId = @ArtistId ); GO
Il se compose essentiellement d'un SELECT
instruction enveloppée dans un autre code. Pour en faire spécifiquement un inline TVF, j'ai lancé la fonction avec RETURNS TABLE
, suivi de près par RETURN
, et se terminant par un SELECT
déclaration entre parenthèses.
Déclarations multiples
Bien que les fonctions de table en ligne ne soient pas conçues pour plusieurs SELECT
instructions (c'est à cela que servent les MSTVF), il est possible d'utiliser l'UNION
opérateur pour combiner le jeu de résultats de plusieurs instructions.
Exemple :
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70)) RETURNS TABLE AS RETURN ( SELECT CONCAT('Cat', ' ', CatId) AS PetId, CatName FROM dbo.Cats WHERE CatName = @PetName UNION ALL SELECT CONCAT('Dog', ' ', DogId) AS PetId, DogName FROM dbo.Dogs WHERE DogName = @PetName ); GO
Options de fonction
Vous pouvez également spécifier des éléments tels que l'utilisation ou non de la liaison de schéma (vous devriez probablement le faire) et le chiffrement ou non de la fonction.
La liaison de schéma empêchera toute modification indésirable apportée aux objets sous-jacents dont dépend la fonction (comme la suppression d'une table, la modification d'une colonne, etc.).
Le cryptage convertira la définition de la fonction dans un format obscurci (pour empêcher les autres de pouvoir la lire).
Voir Créer une fonction de table en ligne pour des exemples d'ajout de liaison de schéma et de chiffrement à un ITVF.