Procédure stockée SQL Server avec des paramètres

Comment créer une procédure stockée SQL Server avec des paramètres ? Pour rappel, une procédure stockée regroupe et ordonnance un ensemble de commandes SQL ou T-SQL. Comment intégrer dans une procédure stockée une requête SELECT sur la table Clients de notre base de données SQL Server ?

Par exemple, au lieu d’afficher toutes les données de la table, pour afficher un seul client, il suffit de filtrer grâce au paramètre passé en entrée.

Créer une procédure stockée SQL Server avec des paramètres

Avant d’exécuter le script de création de la procédure stockée, créer au préalable la table Clients.

Ensuite, utiliser ce script SQL Server pour créer la table des Clients.

Requête SQL Server pour afficher le contenu de la table CLIENTS
Requête SQL Server pour afficher le contenu de la table CLIENTS

Exemple de code Create Procedure T-SQL avec un seul paramètre

Voici un exemple de procédure stockée SQL qui utilise un seul et unique paramètre. Ce paramètre est le numéro de client. La procédure affiche le client dont le numéro est passé en paramètre.

CREATE PROCEDURE uspGetClient 
	@NoClient INT
AS
	SELECT	*
	FROM	[dbo].[CLIENTS]
	WHERE	[NOCLIENT] = @NoClient
GO

Pour appeler la procédure stockée, exécuter le code comme suit avec EXEC ou EXECUTE :

EXEC uspGetClient @NoClient = 3;

EXECUTE uspGetClient @NoClient = 3;
Résultat de l'exécution de la procédure SQL avec un paramètre
Résultat de l’exécution de la procédure SQL avec un paramètre

Dans l’exemple précédent, l’appel de la procédure transmet la valeur du paramètre. De la même manière, exécuter la procédure SQL Server sans fournir de valeur au paramètre @NoClient :

EXEC uspGetClient; 

Alors le message d’erreur SQL suivant est affiché car le paramètre numéro de client est obligatoire et n’est pas de valeur par défaut assignée :

Msg 201, Level 16, State 4, Procedure uspGetClient, Line 0
Procedure or function ‘uspGetClient’ expects parameter ‘@NoClient’, which was not supplied.

Gérer la valeur par défaut des paramètres dans une procédure

Pour aller plus loin et gérer les valeurs par défaut, c’est simple, dans la plupart des cas, il est conseillé de passer une valeur aux paramètres.

Dans la pratique, ce n’est pas toujours possible voire utile. Pour prévoir le cas où un appel à la procédure se fait sans paramètre, utiliser la valeur NULL. En effet NULL permet d’initialiser une valeur de paramètre dans la procédure et éviter les erreurs.

Après cela, exécuter cette deuxième version de la procédure stockée sans paramètre.

Cette fois, aucune erreur et la requête ne retourne aucune ligne car tous les clients contenus dans la table ont un numéro de client.

-- Tester si la procédure existe et la supprimer
IF EXISTS (
	SELECT name 
	FROM sysobjects 
	WHERE name = 'uspGetClient' AND type = 'P'
)
  DROP PROCEDURE uspGetClient
GO

-- Créer la procédure avec une valeur par défaut
CREATE PROCEDURE uspGetClient 
  @NoClient int = NULL
AS
  SELECT	*
  FROM	[dbo].[CLIENTS]
  WHERE	[NOCLIENT] = @NoClient
GO

-- Exécuter la procédure stockée sans passer de paramètre
EXEC uspGetClient; 
Supprimer, Créer et Exécuter la procédure sans passer de paramètre
Supprimer, Créer et Exécuter la procédure sans passer de paramètre

Créer une procédure Microsoft avec plusieurs paramètres en variables

C’est le même principe qu’avec un paramètre unique, et il faut lister, initialiser et appeler chaque paramètre indépendamment.

Ainsi, énumérer et séparer par une virgule chaque paramètre et son type de données, comme dans cet exemple de code SQL :

-- Tester si la procédure existe et la supprimer
IF EXISTS (
	SELECT name 
	FROM sysobjects 
	WHERE name = 'uspGetClient' AND type = 'P'
)
  DROP PROCEDURE uspGetClient
GO

-- Créer la même procédure avec deux paramètres et les valeurs par défaut
CREATE PROCEDURE uspGetClient 
  @NoClient	int = NULL, 
  @Ville	nvarchar(20) = NULL
AS
  SELECT	*
  FROM	[dbo].[CLIENTS]
  WHERE	[NOCLIENT]	= @NoClient
    OR	[VILLE]		= @Ville
GO

-- Appeler la procédure avec différentes combinaisons de paramètres
EXEC uspGetClient @NoClient = 1, @Ville = 'Lyon';

EXEC uspGetClient @NoClient = 1;

EXEC uspGetClient @Ville = 'Paris';

En effet, on peut appeler chacun des paramètres seuls, ou les deux simultanément. Il est possible de ne passer aucun paramètre car la procédure initialise les valeurs par défaut avec la valeur NULL.

Suppression, création et exécution de procédure stockée SQL Server avec des paramètres.

Enfin, appeler la procédure stockée uspGetClient sans paramètre est possible. Elle retourne dans ce cas toutes les données contenues dans la table Clients car c’est l’opérateur logique OR qui est utilisé dans la clause WHERE.

En conclusion, cet article explique pas à pas comment créer une procédure stockée SQL Server avec des paramètres.

Cet article est utile? Partagez-le.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*