Partager via


Notions fondamentales sur les fonctions définies par l'utilisateur

A l'instar des fonctions dans les langages de programmation, les fonctions définies par l'utilisateur de MicrosoftSQL Server sont des routines qui acceptent des paramètres, exécutent une action, par exemple un calcul complexe, et retournent le résultat de cette action sous forme de valeur. La valeur retournée peut être une valeur scalaire unique ou un jeu de résultats.

Avantages des fonctions définies par l'utilisateur

Les avantages de l'utilisation des fonctions définies par l'utilisateur dans SQL Server sont les suivants :

  • Elles permettent d'utiliser la programmation modulaire.

    Vous pouvez créer la fonction une fois, la stocker dans la base de données et l'appeler autant de fois que vous le voulez dans votre programme. Les fonctions définies par l'utilisateur sont modifiables indépendamment du code source du programme.

  • Leur exécution est plus rapide.

    De la même façon que les procédures stockées, les fonctions Transact-SQL définies par l'utilisateur réduisent le coût de compilation du code Transact-SQL en mettant en cache les plans pour les réutiliser au cours d'exécutions répétées. La fonction définie par l'utilisateur n'a donc pas besoin d'être réanalysée et réoptimisée à chaque utilisation, ce qui réduit nettement les durées d'exécution.

    Les fonctions CLR offrent des avantages considérables en termes de performance par rapport aux fonctions Transact-SQL pour ce qui concerne les tâches de calcul, la manipulation de chaînes et la logique métier. Les fonctions Transact-SQL sont plus adaptées à une logique intensive d'accès aux données.

  • Elles permettent une réduction du trafic sur le réseau.

    Une opération qui filtre des données en fonction d'une contrainte complexe qui ne peut pas être exprimée dans une même expression scalaire peut être exprimée sous forme de fonction. La fonction peut ensuite être appelée dans la clause WHERE pour réduire le nombre de lignes envoyées aux clients

Composants d'une fonction définie par l'utilisateur

Les fonctions définies par l'utilisateur peuvent être écrites en langage Transact-SQL ou tout autre langage de programmation .NET. Pour plus d'informations sur l'utilisation des langages .NET dans les fonctions, consultez Fonctions CLR définies par l'utilisateur.

Toutes les fonctions définies par l'utilisateur présentent la même structure en deux parties : un en-tête et un corps. La fonction prend zéro, un ou plusieurs paramètres d'entrée et retourne une valeur scalaire ou une table.

L'en-tête définit :

  • le nom de la fonction et le nom facultatif du schéma/propriétaire ;

  • le nom et le type de données du paramètre d'entrée ;

  • les options applicables au paramètre d'entrée ;

  • le nom facultatif et le type de données du paramètre de retour ;

  • les options applicables au paramètre de retour.

Le corps définit l'action, ou la logique, que la fonction doit exécuter. Il contient l'un des éléments suivants :

  • une ou plusieurs instructions Transact-SQL qui réalisent la logique de la fonction ;

  • une référence à un assembly .NET.

L'exemple suivant illustre une fonction Transact-SQL simple définie par l'utilisateur et identifie ses principaux composants. La fonction évalue une date fournie et retourne une valeur désignant la position de cette date dans la semaine.

IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay           -- function name
(@Date datetime)                     -- input parameter name and data type
RETURNS int                          -- return parameter data type
AS
BEGIN                                -- begin body definition
RETURN DATEPART (weekday, @Date)     -- action performed
END;
GO

L'exemple suivant montre la fonction utilisée dans une instruction Transact-SQL.

SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO

Voici l'ensemble des résultats.

DayOfWeek
---------
6  
(1 row(s) affected)