Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Creare una stored procedure in SQL Server 2017

Una stored procedure è un gruppo di istruzioni SQL compilate in una. Le stored procedure possono includere business logic e altri costrutti di programmazione.

In SQL Server, una stored procedure è un gruppo di una o più istruzioni Transact-SQL o un riferimento a un metodo CLR (Common Runtime Language) di Microsoft .NET Framework.

Programmabilità

Una stored procedure è più di un semplice script lungo. È uno script che è stato salvato in SQL Server in particolare nelle Stored Procedure nodo e può:

  • Accetta i parametri di input (e restituisce più valori sotto forma di parametri di output al programma chiamante).
  • Contengono istruzioni di programmazione.
  • Restituisce un valore di stato a un programma chiamante per indicare l'esito positivo o negativo e il motivo di qualsiasi errore.

Le stored procedure spesso contengono logica aziendale. Ad esempio, una procedura memorizzata può accettare i parametri che le vengono passati e confrontarli con questi parametri usando IF dichiarazioni. Ad esempio, se il parametro è un valore, fallo, se è un altro valore, fallo.

Le stored procedure possono migliorare le prestazioni in un'applicazione, poiché la stored procedure viene analizzata e ottimizzata non appena viene creata e quindi archiviata in memoria. L'esecuzione di una query condizionale tramite stored procedure può essere estremamente rapida, rispetto a un'applicazione che invia una query attraverso la rete, a SQL Server, quindi riceve tutti i dati restituiti attraverso la rete in modo che possa filtrarla e selezionarla solo i record a cui è interessato.

Vantaggi delle stored procedure

Di seguito sono riportati alcuni dei principali vantaggi nell'utilizzo delle stored procedure:

Vantaggio Spiegazione
Programmazione modulare Puoi scrivere una stored procedure una volta, quindi richiamarla ancora e ancora, da parti diverse di un'applicazione (e anche da più applicazioni).
Prestazioni Le stored procedure forniscono un'esecuzione più rapida del codice e riducono il traffico di rete.
  • Esecuzione più veloce:le stored procedure vengono analizzate e ottimizzate non appena vengono create e la stored procedure viene archiviata in memoria. Ciò significa che verrà eseguito molto più velocemente rispetto all'invio di molte righe di codice SQL dall'applicazione a SQL Server. Ciò richiede che SQL Server compili e ottimizzi il codice SQL ogni volta che viene eseguito.
  • Traffico di rete ridotto:se invii molte righe di codice SQL sulla rete al tuo SQL Server, ciò influirà sulle prestazioni della rete. Ciò è particolarmente vero se hai centinaia di righe di codice SQL e/o hai molte attività sulla tua applicazione. L'esecuzione del codice in SQL Server (come stored procedure) elimina la necessità di inviare questo codice in rete. L'unico traffico di rete sarà costituito dai parametri forniti e dai risultati di qualsiasi query.
Sicurezza Gli utenti possono eseguire una procedura memorizzata senza dover eseguire direttamente nessuna delle istruzioni. Pertanto, una procedura memorizzata può fornire funzionalità di database avanzate per utenti che normalmente non avrebbero accesso a queste attività, ma questa funzionalità è resa disponibile in modo strettamente controllato.

Come creare una stored procedure

Per creare una procedura memorizzata, utilizzare CREATE PROCEDURE istruzione, seguita dal codice che costituisce la stored procedure. Se la tua procedura memorizzata accetterà parametri, devono essere inclusi dopo il nome.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Esempio

Ecco un esempio di creazione di una stored procedure e quindi di esecuzione di tale stored procedure.

  1. Crea la stored procedure

    Esegui la seguente istruzione sul database Music che abbiamo creato durante questo tutorial.

    Questo esempio crea una stored procedure denominata AlbumsFromArtist. Seleziona tutti gli album di un artista specificato durante l'esecuzione della procedura memorizzata.

    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. Visualizza la procedura archiviata

    Espandi Programmabilità> Stored procedure nodo nel database applicabile per visualizzare la procedura memorizzata appena creata. È inoltre possibile espandere i Parametri della stored procedure node per vedere i parametri che devi passare quando lo esegui.

  3. Esegui la procedura archiviata

    Ora che la stored procedure è stata creata, puoi eseguirla utilizzando un EXECUTE istruzione e passando tutti i parametri richiesti.

    Nel nostro esempio, dobbiamo passare il nome dell'artista.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    In alternativa, puoi omettere il nome del parametro quando passi i parametri. In questo modo:

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Modificare una procedura memorizzata

Puoi modificare la tua procedura memorizzata con ALTER PROCEDURE dichiarazione. Proprio come quando si modifica una vista, è possibile modificare una procedura memorizzata semplicemente applicando la nuova definizione della procedura memorizzata.

  1. Modificare la procedura memorizzata

    Esegui la seguente istruzione. Ciò aggiunge una nuova colonna ai risultati restituiti dalla stored procedure. Aggiungiamo anche alias ai nomi delle colonne.

    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. Esegui la procedura archiviata

    Ora che abbiamo aggiunto il Genre colonna alla vista, la procedura memorizzata ora restituisce quella colonna quando la eseguiamo.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";