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

Introduction aux fonctions définies par l'utilisateur dans SQL Server

SQL Server est livré avec un ensemble de fonctions intégrées qui vous permettent d'effectuer diverses opérations. Chaque fonction intégrée a un objectif spécifique et ne peut pas être modifiée. Si une fonction sert votre objectif, vous pouvez continuer et l'utiliser.

Mais que se passe-t-il si vous ne trouvez pas une fonction qui répond à vos besoins ?

Il est alors temps d'écrire votre propre fonction définie par l'utilisateur.

Qu'est-ce qu'une fonction définie par l'utilisateur ?

Une fonction définie par l'utilisateur (UDF) est une routine qui peut prendre des paramètres, effectuer des calculs ou d'autres actions et renvoyer un résultat. Et comme son nom l'indique, il est défini et créé par l'utilisateur. Dans ce cas, "l'utilisateur" est le programmeur SQL, le DBA ou celui qui a écrit la fonction.

Le terme fonction définie par l'utilisateur la distingue des fonctions intégrées fournies avec SQL Server.

Vous pouvez spécifier si l'UDF acceptera ou non des paramètres, et si oui, leurs noms, types de données, etc. Par exemple, vous pouvez écrire une UDF qui accepte un ID de produit comme argument. La fonction peut alors l'utiliser dans son calcul. Cela signifie que la sortie de la fonction dépendra de l'entrée qui lui est fournie lorsqu'elle est invoquée.

Une fois qu'une UDF a été créée, elle peut alors être invoquée.

Appeler une fonction définie par l'utilisateur

Le code à l'intérieur de la fonction n'est pas exécuté lorsque la fonction est créée. Il n'est exécuté que lorsque la fonction est invoquée .

"Invoquer" une fonction est parfois appelé "appeler" une fonction. C'est à ce moment que vous obtenez la fonction pour faire ce pour quoi elle a été conçue. Fondamentalement, vous créez une fonction, puis elle attend d'être invoquée.

Vous pouvez invoquer une UDF à partir de votre code T-SQL, tout comme vous appelleriez une fonction système. Par exemple, vous pouvez utiliser une UDF dans un WHERE clause afin d'affiner les résultats d'un SELECT déclaration. Vous pouvez également l'utiliser dans la liste des colonnes à renvoyer.

Les UDF peuvent également être utilisées dans les colonnes calculées. Cela peut être pratique si vous avez besoin d'une colonne calculée pour accéder aux données d'une autre colonne.

Paramètres

Une fonction définie par l'utilisateur peut accepter jusqu'à 1024 paramètres d'entrée. Cependant, vous pouvez également définir une fonction sans aucun paramètre si nécessaire.

Un exemple de fonction intégrée sans aucun paramètre est GETDATE() . Cette fonction renvoie simplement l'horodatage actuel du système de base de données. Pas besoin de passer des paramètres pour l'obtenir.

Un exemple de fonction définie par l'utilisateur avec un seul paramètre pourrait être celle qui renvoie les coordonnées d'un client en fonction de l'ID du client. Lorsque vous appelez la fonction, vous transmettez l'ID du client à la fonction en tant que paramètre. La fonction peut alors rechercher les détails du client et les renvoyer dans la variable de retour. Si vous transmettez un identifiant client différent, la fonction renverra les détails de ce client.

Avantages des fonctions définies par l'utilisateur

Certains des principaux avantages des FDU sont les suivants.

Programmation modulaire
Les UDF vous permettent d'écrire du code une seule fois, puis de l'appeler autant de fois que nécessaire. Pas besoin de réécrire le même code à chaque fois que vous devez faire la même chose. Appelez simplement la fonction à la place. Ceci est également bénéfique si quelque chose change. Vous n'avez besoin de le mettre à jour qu'à un seul endroit - la fonction. Si vous n'avez pas utilisé la fonction, vous devrez la mettre à jour à plusieurs endroits dans votre application.
Performances
Les UDF réduisent le coût de compilation du code T-SQL en mettant en cache les plans et en les réutilisant pour des exécutions répétées. L'UDF n'a pas besoin d'être ré-analysé et ré-optimisé à chaque utilisation. Cela se traduit par des temps d'exécution beaucoup plus rapides.
Trafic réseau réduit
Une opération qui filtre les données en fonction d'une contrainte complexe qui ne peut pas être exprimée dans une seule expression scalaire peut être exprimée sous forme de fonction. La fonction peut alors être appelée dans le WHERE clause pour réduire le nombre de lignes envoyées au client.

Les FDU peuvent également avoir d'autres avantages plus spécifiques, comme dans l'exemple précédent que j'ai mentionné avec la colonne calculée accédant aux données d'une autre table.

Types de fonctions définies par l'utilisateur

Il existe deux types de fonctions T-SQL définies par l'utilisateur :

Fonctions scalaires
Les fonctions scalaires définies par l'utilisateur renvoient une seule valeur de données. Vous définissez le type de la valeur dans la fonction. Le type de retour peut être n'importe quel type de données sauf texte , texte , image , curseur , et horodatage .
Fonctions de table
Les fonctions table (TVF) renvoient une table. Leur type de retour est donc table . Il existe deux types de TVF :TVF en ligne et TVF multi-instructions. Un TVF en ligne n'a pas de corps de fonction. Sa table de retour est le résultat d'un seul SELECT déclaration. Un TVF multi-instructions, en revanche, a un corps de fonction. Avec les TVF multi-instructions, vous spécifiez la structure de la table dans la variable de retour.

Vous pouvez également créer des fonctions scalaires et table en tant que fonctions définies par l'utilisateur Common Language Runtime (CLR).

À partir de SQL Server 2005 (9.x), vous pouvez écrire des fonctions définies par l'utilisateur dans n'importe quel langage de programmation Microsoft .NET Framework, tel que Microsoft Visual Basic .NET ou Microsoft Visual C#.