Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Introduction aux fonctions de table en ligne (ITVF) dans SQL Server

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.