par: Greg Robidoux
Overview
La vraie puissance des procédures stockées est la capacité de transmettre des paramètres et de faire Gérer les différentes requêtes qui sont faites. Dans thistopic, nous examinerons le passage de valeurs de paramètres à une procédure stockée.
explication
tout comme vous avez la possibilité d’utiliser des paramètres avec votre code SQL, vous pouvez également configurer vos procédures stockées pour accepter une ou plusieurs valeurs de paramètre. Allexamples utilise la base de données AdventureWorks.,
création D’une procédure stockée SQL avec des paramètres
- pour créer une procédure stockée avec des paramètres en utilisant la syntaxe suivante:
- créer une procédure dbo.uspGetAddress @ City nvarchar (30) AS
- voir les détails et les exemples ci-dessous
requête SQL Server pour se transformer en procédure stockée
Voici la requête que nous voulons utiliser pour créer la procédure stockée.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
L’idée est de créer la procédure stockée où la Ville est passé dans thestored procédure de sorte qu’il peut créer des résultats dynamiques., Cela peut être fait comme suit en utilisantune variable. Si nous exécutons le code ci-dessous, il ne renverra que les résultats pour NewYork.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
Nous pourrions utiliser cette approche et continuer à mettre à jour la variable @City, mais il existe une meilleure façon de le faire en créant une procédure stockée.
Créer une Procédure Stockée SQL Server avec Un Paramètre
Dans cet exemple, nous allons interroger la Personne.Table d’adresses de la AdventureWorksdatabase, mais au lieu de récupérer tous les enregistrements, nous la limiterons à une particularité., Cet exemple suppose qu’il y aura une correspondance exacte sur la valeur de la ville qui est passée.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
pour appeler cette procédure stockée, nous l’exécutons comme suit:
EXEC dbo.uspGetAddress @City = 'New York'
suppression de la procédure stockée
Si vous avez créé la procédure stockée et que vous souhaitez recréer la procédure storedprocedure avec le même nom, vous pouvez supprimez-le en utilisant ce qui suitavant d’essayer de le créer à nouveau.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
Si vous essayez de créer la procédure stockée et il existe déjà, vous obtiendrez un message d’erreur.,
il y a déjà un objet nommé ‘uspGetAddress’ dans la base de données.
procédure stockée SQL Server avec paramètre utilisant un caractère générique
Nous pouvons également faire la même chose, mais permettre aux utilisateurs de nous donner un point de départ pour rechercher les données.
ici, nous pouvons changer le « = » en un LIKE et utiliser le caractère générique »% ».
cela peut être exécuté comme suit pour trouver toutes les villes qui commencent par New.,
EXEC dbo.uspGetAddress @City = 'New'
erreur de procédure stockée SQL Server lorsque le paramètre N’est pas passé
dans les deux exemples suivants, il suppose qu’une valeur de paramètre sera toujours transmise. Si vous essayez d’exécuter la procédure sans passer un parametervalue, vous obtiendrez un message d’erreur tel que le suivant:
EXEC dbo.uspGetAddress
procédure ou fonction ‘uspGetAddress’ attend le paramètre ‘@City’, qui n’a pas été fourni.,
procédure stockée SQL Server utilisant NULL comme paramètre par défaut
dans la plupart des cas,il est toujours recommandé de transmettre toutes les valeurs des paramètres, mais parfois ce n’est pas possible. Donc, dans cet exemple, nous utilisons L’option NULLEPOUR vous permettre de ne pas passer une valeur de paramètre. Si nous créons et exécutons cette storedprocedure telle quelle, elle ne renverra aucune donnée, car elle recherche des valeurs de ville égales à NULL.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
Si nous courons à la suite, il travaillera, mais aucune donnée ne sera retourné.,
EXEC dbo.uspGetAddress
Nous pourrions changer cette procédure stockée et utiliser la fonction ISNULL pour contourner ce problème. Donc, si une valeur est passée, elle utilisera la valeur pour réduire le jeu de résultats et si une valeur n’est pas passée, elle retournera tous les enregistrements. (Remarque: Si la colonne ville a des valeurs NULL, cela n’inclura pas ces valeurs. Vous devrez ajouter une logique supplémentaire pour City IS NULL)
maintenant, si nous exécutons la commande ci-dessous, toutes les données seront renvoyées de la table.,
EXEC dbo.uspGetAddress
Créer une Procédure Stockée SQL Server avec Plusieurs Paramètres
la mise en place de plusieurs paramètres est très facile à faire. Vous avez juste besoin de listeach paramètre et le type de données séparés par une virgule comme indiqué ci-dessous.
pour exécuter cela, vous pouvez effectuer l’une des opérations suivantes:
dernière mise à jour: 4/3/2020