Exécuter des fonctions définies par l’utilisateur

S’applique à :SQL ServerAzure SQL Database

Exécuter une fonction définie par l’utilisateur à l’aide de Transact-SQL

Les fonctions scalaires doivent être appelées avec au moins le nom en deux parties de la fonction (<schema>.<function>). Pour plus d'informations, consultez CREATE FUNCTION (Transact-SQL).

Limites

Dans Transact-SQL, vous pouvez fournir les paramètres à l’aide de <value> ou de @parameter_name = <value>. Un paramètre ne fait pas partie d’une transaction. Par conséquent, si un paramètre est modifié dans une transaction qui est ensuite annulée, la valeur du paramètre ne revient pas à sa valeur précédente. La valeur renvoyée à l'appelant est toujours la valeur au moment du renvoie du module.

Autorisations

Aucune autorisation n’est requise pour exécuter l’instruction EXECUTE . Cependant, des autorisations sont requises sur les éléments sécurisables référencés dans la chaîne EXECUTE. Par exemple, si la chaîne contient une instruction INSERT, l'appelant de l'instruction EXECUTE doit posséder l'autorisation INSERT sur la table cible. Les autorisations sont vérifiées au moment où l'instruction EXECUTE est rencontrée, même si l'instruction EXECUTE est incluse dans un module. Pour plus d'informations, consultez EXECUTE.

Utiliser Transact-SQL

Cet exemple utilise la fonction scalaire ufnGetSalesOrderStatusText disponible dans la plupart des éditions de AdventureWorks2022. L’objectif de la fonction est de retourner une valeur de texte pour l’état des ventes à partir d’un entier donné. Faites varier l’exemple en passant des nombres entiers de 1 à 7 au paramètre @Status.

USE [AdventureWorks2022]
GO

-- Declare a variable to return the results of the function.
DECLARE @ret NVARCHAR(15);

-- Execute the function while passing a value to the @status parameter
EXEC @ret = dbo.ufnGetSalesOrderStatusText @Status = 5;

-- View the returned value.
-- The Execute and Select statements must be executed at the same time.
SELECT N'Order Status: ' + @ret;

Résultat :

Order Status: Shipped