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

Introduction aux fonctions table multi-instructions (MSTVF) dans SQL Server

Dans SQL Server, la fonction table multi-instructions est l'un des deux types de fonctions table Transact-SQL (l'autre type étant la fonction table en ligne).

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 multi-instructions (parfois appelées MSTVF) peuvent consister en plusieurs instructions, dont les résultats sont stockés dans une variable de retour. Vous incluez les spécifications de la variable de retour en haut de la fonction. Ceci spécifie la structure de la table de retour. En d'autres termes, vous spécifiez le nombre de colonnes, leurs noms, les types de données, etc.

Cela contraste avec les TVF en ligne (également appelées ITVF), qui n'utilisent pas de variable de retour (la table de retour est définie par le SELECT déclaration).

Les MSTVF utilisent également le BEGIN /END syntaxe, qui est une autre chose qui les distingue des ITVF (les ITVF n'utilisent pas cette syntaxe).

Exemple de fonction table multi-instructions

Voici un exemple de MSTVF de base :

CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70))
    RETURNS @pets TABLE (
        PetId varchar(20),
        PetName varchar(70)
    )
AS
BEGIN
    INSERT INTO @pets
    SELECT 
        CONCAT('Cat', ' ', CatId),
        CatName
    FROM dbo.Cats
    WHERE CatName = @PetName;

    INSERT INTO @pets
    SELECT 
        CONCAT('Dog', ' ', DogId),
        DogName
    FROM dbo.Dogs
    WHERE DogName = @PetName;

    IF @@ROWCOUNT = 0
    BEGIN
        INSERT INTO @pets
        VALUES (
            '',
            'There are no pets of that name.'
            )
    END

    RETURN;
END;

GO

Ici, je démarre la fonction en définissant la variable de retour appelée @pets . Il est de type tableau , et il renverra deux colonnes.

Dans ce cas, j'ai deux SELECT déclarations et un IF déclaration. Les résultats de chacun sont stockés dans la variable de retour. Cela se fait via un INSERT déclaration à chaque fois.

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).

Consultez Créer une fonction de table à plusieurs valeurs pour obtenir des exemples d'ajout de liaison de schéma et de chiffrement à un ITVF.