Gérer les fonctions SQL Server utilisateur en T-SQL

Comment gérer les fonctions SQL Server utilisateur avec du code T-SQL ?

Lorsque l’on commence le développement T-SQL en utilisant les fonctions SQL Server, il faut apprendre les syntaxes et éviter les erreurs, sinon le SQL devient frustrant. Cet article présente le code pour créer, modifier, appeler et supprimer les fonctions SQL Server. Ces exemples de fonctions utilisateur comme Create Function présentent la syntaxe des principales opérations basiques.

Tout d’abord, il existe deux types de fonctions SQL Server qui sont les fonctions définies par les utilisateurs et les fonctions intégrées ou natives. Cet article traite des fonctions créées par l’utilisateur uniquement.

Gérer les fonctions SQL Server de type utilisateur avec du code T-SQL

Une fonction SQL Server définie par l’utilisateur est un programme Transact-SQL qui accepte des paramètres en entrée, exécutes des actions, comme lire une table SQL et qui retourne un résultat en sortie.

Pour commencer, créer au préalable la table client avec le code disponible sur cette page: Code de création de la table d’exemple CLIENTS.

1. Créer une fonction SQL Server avec Create Function

Premièrement, voici la création en T-SQL d’une fonction MS SQL utilisateur qui prend comme paramètre en entrée le numéro de client et retourne le nom du client stocké dans la variable @NomClient. Le script de création SQL Server create function doit obligatoirement retourner une valeur.

CREATE FUNCTION dbo.ufnListeClients(@NoClient INTEGER)
RETURNS NVARCHAR(20)
AS 
BEGIN 
  DECLARE	@NomClient	AS NVARCHAR(20);
  SELECT	@NomClient = [NOM]
  FROM		dbo.CLIENTS
  WHERE		[NOCLIENT] = @NoClient;
  RETURN	@NomClient;
END
GO

2. Modifier une fonction SQL Server avec Alter Function

Deuxièmement, la commande ALTER permet de modifier la fonction créer plus haut pour que cette fois elle ne retourne pas uniquement le nom du client, mais également la ville du client, séparé par un trait. Le résultat de la fonction est stocké dans la variable @NomVilleClient.

ALTER FUNCTION dbo.ufnListeClients(@NoClient INTEGER)
RETURNS NVARCHAR(40)
AS 
BEGIN 
  DECLARE	@NomVilleClient	AS NVARCHAR(20);
  SELECT	@NomVilleClient = [NOM] + '-' + [VILLE] 
  FROM		dbo.CLIENTS
  WHERE		[NOCLIENT] = @NoClient;
  RETURN	@NomVilleClient;
END
GO

Voici un tutoriel Microsoft pour modifier une procédure stockée existante dans une base de données MS SQL.

3. Supprimer une fonction SQL avec Drop Function

Cette commande SQL permet de supprimer une fonction, sans toutefois faire de test d’existence.

DROP FUNCTION ufnListeClients;
GO

Si la fonction n’était pas dans la base de données alors cette erreur SQL Server s’affiche dans SSMS:

Impossible de supprimer la fonction ‘ufnListeClients’, car elle n’existe pas ou vous n’avez pas la permission.

Le même message d’erreur en Anglais :

Cannot drop the function ‘ufnListeClients’, because it does not exist or you do not have permission.

4. Tester l’existence d’une fonction SQL Server utilisateur pour mieux gérer sa suppression

Pour éviter cette erreur, il suffit d’ajouter une commande pour tester l’existence de la fonction au préalable.

IF OBJECT_ID (N'dbo.ufnListeClients', N'FN') IS NOT NULL  
    DROP FUNCTION ufnListeClients;  
GO

Utiliser l’option DROP FUNCTION IF EXISTS

Depuis SQL Server 2016, il est plus facile de supprimer un objet de la base de données. Il suffit d’utiliser ce code d’une seule ligne qui ne supprime la fonction uniquement si elle dans la base.

DROP FUNCTION IF EXISTS ufnListeClients;

5. Comment appeler une fonction utilisateur SQL Server ?

Pour aller plus loin, pour appeler une fonction, utiliser un SELECT suivi du nom de la fonction sans oublier le paramètre, ici c’est le numéro de client. Certaines fonctions gèrent le paramètre par défaut, et dans ce cas-là il n’est pas obligatoire.

Par exemple, la première commande retourne le nom du client correspondant au numéro de client 1 et ne nomme pas la colonne.

SELECT dbo.ufnListeClients(1);

Enfin, cet appel de la fonction retourne le nom du client dans une colonne nommée « CLIENTS ».

SELECT dbo.ufnListeClients(1) AS CLIENT;

Cet article explique comment gérer les fonctions SQL Server utilisateur via un exemples SQL Server de CREATE FUNCTION. Enfin, pour avoir plus d’informations sur les fonctions SQL Server, vous pouvez lire directement la documentation sur le site de Microsoft. Par ailleurs, la documentation en version Anglaise est plus riche et plus complète que la version Française.

Les fonctions UDF ne peuvent pas être exécutées en parallèle

Les fonctions UDF pour User Defined Functions en Anglais ne peuvent pas être exécutées en parallèle. Les types de fonctions SQL Server, UDF ou système :

  • Les fonctions scalaires pour retourner une valeur unique via l’instruction RETURNS.
  • Les fonctions table pour renvoyer le type de données table, qui est générée par une requête SELECT.
  • Enfin, les fonctions système sont des fonctions intégrées au SGBD Microsoft et qui ne sont pas modifiables. Quelques exemples comme : GETDATE(), CAST, CONVERT(), ROUND(), etc.

Les fonctions systèmes sont de plusieurs types et couvrent un large éventail d’options. Par exemple les fonctions de conversion de données, les fonctions de calcul et d’affichage de la date et de l’heure, ou encore les fonctions de chaines de caractères.

Ci-dessous, un article plus complet pour modifier et appeler une fonction SQL Server existante. L’exemple permet de modifier une fonction qui liste les clients d’une table. Puis d’afficher le nom du client concaténé avec la ville du client dans la même colonne.

Les fonctions SQL Server déterministes et non déterministes

Il existe une propriété des fonctions SQL Server moins connues, c’est le déterminisme. Une fonction déterministe renvoie la même valeur à tout moment, avec les mêmes données dans la base bien sûr. Cependant, une fonction non déterministe ne retourne jamais la même valeur, car elle est liée au temps, comme la fonction de temps CURRENT_TIMESTAMP.

Un autre type de fonctions CLR est disponible, CLR signifie Common Language Runtime en Anglais. Les fonctions CLR nécessite d’intégrer dans l’environnement de développement et dans SQL Server le Framework .NET. Les fonctions CLR peuvent intégrer du code .NET et permettent une application plus large que les fonctions SQL utilisateur classiques.

Voici pour finir un article complet sur l’ensemble des syntaxes CREATE FUNCTION avec toutes les combinaisons possibles sur le site officiel de Microsoft.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*