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

Qu'est-ce qu'une UDF scalaire dans SQL Server ?

Dans SQL Server, une UDF scalaire, ou fonction scalaire définie par l'utilisateur, est une fonction définie par l'utilisateur qui renvoie une valeur unique.

Cela contraste avec une fonction table, qui renvoie un ensemble de résultats sous la forme d'un tableau.

Les fonctions définies par l'utilisateur peuvent être écrites sous forme de fonctions UDF T-SQL ou de fonctions UDF CLR (Common Language Runtime). Le CLR vous permet de créer des UDF dans du code managé à l'aide de n'importe quel langage de programmation .NET Framework. Ces fonctions sont alors accessibles à T-SQL ou à un autre code managé.

Exemple 1 - UDF scalaire de base

Voici un exemple de code utilisé pour créer une UDF scalaire T-SQL de base.

CREATE FUNCTION dbo.ufn_discountPrice( @price DECIMAL(12,2), @discount DECIMAL(12,2) ) RENVOIE DECIMAL (12,2)ASBEGIN RETURN @price * (1 - @discount);END; 

Cette UDF scalaire accepte deux paramètres ; @price et @discount . Ceux-ci sont transmis à la fonction en tant qu'arguments chaque fois que la fonction est invoquée. La fonction prend la valeur de ces arguments, effectue un calcul à l'aide de ces valeurs, puis renvoie la valeur résultante. Dans ce cas, le prix réduit est retourné.

Exemple 2 - Invoquer l'UDF

Une fois l'UDF créée, elle peut être invoquée dans le code T-SQL à tout moment.

Voici un exemple d'invocation de l'UDF :

SELECT dbo.ufn_discountPrice(100, .2) AS Result ;

Résultat

+----------+| Résultat ||----------|| 80.00 |+----------+

Vous pouvez également utiliser des UDF scalaires dans des colonnes calculées. Cela peut être particulièrement pratique si vous avez besoin de la colonne calculée pour accéder aux données d'une autre table.

Options de fonction

Lorsque vous créez une FDU scalaire, il existe différentes options que vous pouvez appliquer à la fonction.

Par exemple, vous pouvez spécifier s'il doit ou non être lié au schéma. Vous pouvez spécifier qu'il doit être crypté. Vous pouvez également spécifier un EXECUTE AS clause pour spécifier le contexte de sécurité dans lequel la fonction définie par l'utilisateur est exécutée.

Consultez la documentation Microsoft pour une liste détaillée des options que vous pouvez fournir lors de la création ou de la modification d'une fonction définie par l'utilisateur.

Type de données de paramètre

Pour les fonctions T-SQL, tous les types de données, y compris les types CLR définis par l'utilisateur et les types de table définis par l'utilisateur, sont autorisés à l'exception de timestamp et le curseur non scalaire et tableau les types.

Pour les fonctions CLR, tous les types de données, y compris les types CLR définis par l'utilisateur, sont autorisés sauf texte , texte , image , types de tableaux définis par l'utilisateur, horodatage les types de données et le curseur non scalaire et tableau les types.

Type de données de retour

Le type de données de retour pour les UDF scalaires T-SQL peut être n'importe quel type de données sauf timestamp et le curseur non scalaire et tableau les types.

Les fonctions CLR peuvent utiliser n'importe quel type de données sauf texte , texte , image , horodatage , et le curseur non scalaire et tableau type.

Les fonctions T-SQL et CLR peuvent avoir un type CLR défini par l'utilisateur pour leur valeur de retour.