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

Créer une procédure stockée dans SQL Server 2017

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é

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

Exemple

Voici un exemple de création d'une procédure stockée puis d'exécution de cette procédure stockée.

  1. Créer la procédure stockée

    Exécutez l'instruction suivante sur la base de données musicale que nous avons créée tout au long de ce didacticiel.

    Cet exemple crée une procédure stockée appelée AlbumsFromArtist. Il sélectionne tous les albums d'un artiste spécifié lors de l'exécution de la procédure stockée.

    CREATE PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT AlbumName, ReleaseDate
    	FROM Albums
    		INNER JOIN Artists
    		ON Albums.ArtistId = Artists.ArtistId 
    	WHERE Artists.ArtistName = @ArtistName;
    GO
  2. Afficher la procédure stockée

    Développez Programmabilité> Procédures stockées nœud sous la base de données applicable pour voir votre procédure stockée nouvellement créée. Vous pouvez également développer les Paramètres de la procédure stockée node pour voir les paramètres que vous devez transmettre lorsque vous l'exécutez.

  3. Exécuter la procédure stockée

    Maintenant que la procédure stockée a été créée, vous pouvez l'exécuter en utilisant un EXECUTE déclaration et en passant tous les paramètres requis.

    Dans notre exemple, nous devons passer le nom de l'artiste.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Vous pouvez également omettre le nom du paramètre lors de la transmission des paramètres. Comme ceci :

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Modifier une procédure stockée

Vous pouvez modifier votre procédure stockée avec le ALTER PROCEDURE déclaration. Tout comme lorsque vous modifiez une vue, vous pouvez modifier une procédure stockée en appliquant simplement la nouvelle définition de procédure stockée.

  1. Modifier la procédure stockée

    Exécutez l'instruction suivante. Cela ajoute une nouvelle colonne aux résultats renvoyés par la procédure stockée. Nous ajoutons également des alias aux noms de colonnes.

    ALTER PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT 
            al.AlbumName, 
            al.ReleaseDate, 
            g.Genre
    	FROM Albums al
    		INNER JOIN Artists ar
    		ON al.ArtistId = ar.ArtistId 
    		INNER JOIN Genres g
    		ON g.GenreId = al.GenreId 
    	WHERE ar.ArtistName = @ArtistName;
    GO
  2. Exécuter la procédure stockée

    Maintenant que nous avons ajouté le Genre colonne à la vue, la procédure stockée renvoie maintenant cette colonne lorsque nous l'exécutons.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";