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.