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.