Une procédure stockée est un groupe d'instructions SQL compilées en une seule. Les procédures stockées peuvent inclure une logique métier et d'autres constructions de programmation.
Dans SQL Server, une procédure stockée est un groupe d'une ou plusieurs instructions Transact-SQL ou une référence à une méthode CLR (Common Runtime Language) Microsoft .NET Framework.
Programmabilité
Mais une procédure stockée est plus qu'un long script. C'est un script qui a été enregistré dans SQL Server spécifiquement sous les procédures stockées nœud, et il peut :
- Accepter les paramètres d'entrée (et renvoyer plusieurs valeurs sous la forme de paramètres de sortie au programme appelant).
- Contient des instructions de programmation.
- Renvoyer une valeur de statut à un programme appelant pour indiquer le succès ou l'échec, et la raison de tout échec.
Les procédures stockées contiennent souvent une logique métier. Par exemple, une procédure stockée peut accepter des paramètres qui lui sont transmis et tester ces paramètres à l'aide de IF
déclarations. Par exemple, si le paramètre est une valeur, faites ceci, si c'est une autre valeur, faites cela.
Les procédures stockées peuvent améliorer les performances d'une application, car la procédure stockée est analysée et optimisée dès sa création, puis stockée en mémoire. L'exécution d'une requête conditionnelle via une procédure stockée peut être extrêmement rapide - par rapport à une application qui envoie une requête sur le réseau, au serveur SQL, puis reçoit toutes les données qui lui sont renvoyées sur le réseau afin qu'elle puisse les filtrer et sélectionner uniquement les enregistrements qui l'intéressent.
Avantages des procédures stockées
Voici quelques-uns des principaux avantages de l'utilisation des procédures stockées :
Avantage | Explication |
---|---|
Programmation modulaire | Vous pouvez écrire une procédure stockée une fois, puis l'appeler encore et encore, à partir de différentes parties d'une application (et même à partir de plusieurs applications). |
Performances | Les procédures stockées accélèrent l'exécution du code et réduisent le trafic réseau.
|
Sécurité | Les utilisateurs peuvent exécuter une procédure stockée sans avoir besoin d'exécuter directement l'une des instructions. Par conséquent, une procédure stockée peut fournir une fonctionnalité de base de données avancée pour les utilisateurs qui n'auraient normalement pas accès à ces tâches, mais cette fonctionnalité est mise à disposition de manière étroitement contrôlée. |
Comment créer une procédure stockée
Pour créer une procédure stockée, utilisez le CREATE PROCEDURE
instruction, suivie du code qui constitue la procédure stockée. Si votre procédure stockée accepte des paramètres, ils doivent être inclus après le nom.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Nous allons maintenant créer une procédure stockée basée sur l'une des vues que nous avons créées précédemment :les RecentAlbums vue.
Cette vue renvoie tous les albums sortis au cours des 20 dernières années. C'est bien tant qu'il n'aura jamais besoin de regarder 20 ans en arrière. Mais que se passe-t-il si vous voulez que l'utilisateur choisisse le nombre d'années qu'il doit couvrir ?
Une procédure stockée peut résoudre ce problème.
Nous allons créer une procédure stockée qui accepte un paramètre. La valeur du paramètre sera le nombre d'années sur lesquelles effectuer la recherche. Par conséquent, cette valeur peut être spécifiée par l'utilisateur chaque fois qu'il exécute la procédure stockée.
-
Concevoir la procédure stockée
Ouvrez une nouvelle fenêtre de requête et ajoutez le code de la procédure stockée.
Dans notre cas, nous allons copier/coller le code de RecentArtists afficher et modifier la partie supérieure, afin qu'elle devienne une procédure stockée.
Nous allons ajouter un paramètre appelé
@Count
qui déterminera combien d'années la procédure stockée doit regarder en arrière.Nous allons donc remplacer la valeur codée en dur de
20
avec@Count
Exemple de code
Voici le code de notre exemple :
CREATE PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()));
-
Créer la procédure stockée
Une fois que tout semble bon, vous pouvez exécuter l'instruction pour créer la procédure stockée.
Cliquez sur Exécuter pour créer la procédure stockée.
Une fois la procédure stockée créée, vous pouvez la voir dans l'Explorateur d'objets (vous devrez peut-être actualiser les Procédures stockées nœud en premier).
-
Exécuter la procédure stockée
Maintenant qu'elle est créée, vous pouvez exécuter la procédure stockée.
Ouvrez une nouvelle fenêtre de requête, ajoutez ceci :
EXEC spRecentAlbums @Count = 5;
Cliquez maintenant sur Exécuter dans la barre d'outils.
La procédure stockée renverra tous les albums sortis au cours des 5 dernières années.
-
Essayez différents paramètres
Essayez de modifier la valeur du paramètre pour voir comment cela affecte les résultats.
Vous pouvez également exécuter plusieurs instructions les unes après les autres. Un nouveau volet de résultats apparaîtra pour chaque déclaration.
Modèle de procédure stockée
Dans SQL Server 2016, vous pouvez créer une procédure stockée en cliquant avec le bouton droit sur Procédures stockées nœud dans l'Explorateur d'objets et en sélectionnant Nouveau> Procédure stockée... ou Nouveau> Procédure stockée compilée nativement... .
Cela ouvrira un modèle prêt à être rempli avec votre propre procédure spécifique.
Exécuter une procédure stockée via l'interface graphique
Vous pouvez également utiliser l'interface utilisateur graphique pour exécuter une procédure stockée.
-
Lancer la Exécuter la procédure Boîte de dialogue
Dans l'Explorateur d'objets, cliquez avec le bouton droit sur la procédure stockée et sélectionnez Exécuter la procédure stockée... .
-
Paramètres d'alimentation
Entrez une valeur pour tous les paramètres requis par la procédure stockée, puis cliquez sur OK .
-
Les résultats
Les résultats s'affichent.
Modifier une procédure stockée
Si vous avez besoin de modifier une procédure stockée existante, remplacez simplement CREATE
avec ALTER
(ainsi que la procédure mise à jour).
Cet exemple modifie la procédure stockée afin que les résultats soient triés par date de sortie dans l'ordre décroissant :
ALTER PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE())) ORDER BY Albums.ReleaseDate DESC;
Procédures stockées système
SQL Server inclut un grand nombre de procédures stockées système pour faciliter les tâches d'administration de la base de données. La plupart des tâches que vous pouvez effectuer via l'interface graphique peuvent être effectuées via une procédure stockée système. Par exemple, certaines des choses que vous pouvez faire avec les procédures stockées du système incluent :
- Configurer les comptes de sécurité
- Configurer des serveurs liés
- Créer un plan de maintenance de base de données
- Créer des catalogues de recherche en texte intégral
- Ajouter une connexion à distance
- Configurer la réplication
- Configurer des tâches planifiées
- et bien plus encore...
Les procédures stockées système sont préfixées par sp_ , il est donc préférable d'éviter d'utiliser ce préfixe pour vos propres procédures.
Conventions de dénomination
C'est une bonne idée de développer une convention de dénomination cohérente pour vos procédures stockées (et pour tous les autres objets de votre base de données).
Certaines personnes préfixent leurs procédures stockées avec usp_ (pour indiquer une procédure stockée définie par l'utilisateur), d'autres la commencent par un mot-clé SQL tel que select , insérer , mettre à jour , supprimer . D'autres utilisent une abréviation pour l'application.
Certains utilisent des traits de soulignement pour séparer chaque mot dans la procédure stockée (par exemple, recent_albums ), tandis que d'autres utiliseront la casse du titre (par exemple, RecentAlbums ).
Par conséquent, il est possible que notre procédure stockée porte l'un des noms suivants, selon la convention de dénomination utilisée.
- Albums récents
- albums_récents
- uspRecentAlbums
- usp_recent_albums
- selectRecentAlbums
- select_RecentAlbums
- select_recent_albums
- getRecentAlbums
- get_recent_albums
Vous obtenez l'image. L'important, c'est la cohérence. Choisissez-en un et respectez-le. Cela vous facilitera la tâche lorsque vous aurez besoin d'utiliser une procédure stockée. Imaginez avoir des scores, voire des centaines de procédures stockées, et chaque fois que vous allez en exécuter une, vous devez y accéder dans l'Explorateur d'objets uniquement parce que vous ne vous souvenez pas si vous l'avez appelé usp_RecentAlbums ou uspRecentAlbums .
Comme mentionné, évitez d'utiliser sp_ comme préfixe pour vos noms de procédure stockée. SQL Server utilise ce préfixe pour les procédures stockées du système.
SQL Server recherche d'abord les procédures stockées du système, donc au mieux, vous subirez une baisse des performances. Au pire, votre procédure ne s'exécutera pas (si elle partage un nom avec une procédure stockée système).