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

SQL Server 2016 :créer une procédure stockée

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.
  • Exécution plus rapide :les procédures stockées sont analysées et optimisées dès qu'elles sont créées et la procédure stockée est stockée en mémoire. Cela signifie qu'il s'exécutera beaucoup plus rapidement que l'envoi de nombreuses lignes de code SQL de votre application au SQL Server. Pour ce faire, SQL Server doit compiler et optimiser votre code SQL à chaque exécution.
  • Réduction du trafic réseau :si vous envoyez de nombreuses lignes de code SQL sur le réseau vers votre serveur SQL, cela aura un impact sur les performances du réseau. Cela est particulièrement vrai si vous avez des centaines de lignes de code SQL et/ou si vous avez beaucoup d'activité sur votre application. L'exécution du code sur SQL Server (en tant que procédure stockée) élimine le besoin d'envoyer ce code sur le réseau. Le seul trafic réseau sera les paramètres fournis et les résultats de toute requête.
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.

  1. 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()));
  2. 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).

  3. 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.

  4. 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.

  1. 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... .

  2. Paramètres d'alimentation

    Entrez une valeur pour tous les paramètres requis par la procédure stockée, puis cliquez sur OK .

  3. 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).