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

SQL Server 2016:creare una stored procedure

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à

Ma una procedura memorizzata è 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
...

Ora creeremo una procedura memorizzata basata su una delle viste che abbiamo creato in precedenza: RecentAlbums visualizza.

Questa visualizzazione restituisce tutti gli album pubblicati negli ultimi 20 anni. Questo va bene fintanto che sarà necessario guardare indietro di 20 anni. Ma cosa succede se si desidera che l'utente scelga quanti anni deve coprire?

Una procedura memorizzata può risolvere questo problema.

Creeremo una procedura memorizzata che accetta un parametro. Il valore del parametro sarà il numero di anni di cui eseguire la ricerca. Pertanto, questo valore può essere specificato dall'utente ogni volta che esegue la procedura memorizzata.

  1. Progetta la stored procedure

    Apri una nuova finestra di query e aggiungi il codice per la procedura memorizzata.

    Nel nostro caso, copieremo/incolleremo il codice da RecentArtists visualizzare e modificare la parte superiore, in modo che diventi una stored procedure.

    Aggiungeremo un parametro chiamato @Count che determinerà quanti anni la stored procedure dovrebbe guardare indietro.

    Quindi sostituiremo il valore hardcoded di 20 con @Count

    Codice campione

    Ecco il codice del nostro esempio:

    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. Crea la stored procedure

    Quando tutto sembra a posto, puoi eseguire l'istruzione per creare la procedura memorizzata.

    Fai clic su Esegui per creare la procedura memorizzata.

    Una volta creata la procedura memorizzata, puoi vederla in Esplora oggetti (potrebbe essere necessario aggiornare le Procedure memorizzate prima il nodo).

  3. Esegui la procedura archiviata

    Ora che è stato creato, puoi eseguire la stored procedure.

    Apri una nuova finestra di query, aggiungi questo:

    EXEC spRecentAlbums @Count = 5;

    Ora fai clic su Esegui dalla barra degli strumenti.

    La stored procedure restituirà tutti gli album pubblicati negli ultimi 5 anni.

  4. Prova diversi parametri

    Prova a modificare il valore del parametro per vedere come ciò influisca sui risultati.

    Puoi anche eseguire più istruzioni una dopo l'altra. Apparirà un nuovo riquadro dei risultati per ogni affermazione.

Modello di stored procedure

In SQL Server 2016, puoi creare una stored procedure facendo clic con il pulsante destro del mouse su Stored procedure nodo in Esplora oggetti e selezionando Nuovo> Stored procedure... o Nuovo> stored procedure compilate in modo nativo... .

Si aprirà un modello pronto per essere popolato con la tua procedura specifica.

Esegui una stored procedure tramite la GUI

È inoltre possibile utilizzare l'interfaccia utente grafica per eseguire una procedura memorizzata.

  1. Avvia la Esegui procedura Finestra di dialogo

    In Esplora oggetti, fai clic con il pulsante destro del mouse sulla stored procedure e seleziona Esegui stored procedure... .

  2. Parametri di fornitura

    Immettere un valore per tutti i parametri richiesti dalla procedura memorizzata, quindi fare clic su OK .

  3. I risultati

    I risultati vengono visualizzati.

Modificare una stored procedure

Se hai bisogno di modificare una stored procedure esistente, sostituisci semplicemente CREATE con ALTER (insieme alla procedura aggiornata).

Questo esempio modifica la stored procedure in modo che i risultati vengano ordinati in base alla data di rilascio in ordine decrescente:

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;

Procedure archiviate di sistema

SQL Server include un gran numero di stored procedure di sistema per facilitare le attività di amministrazione del database. Molte delle attività che è possibile eseguire tramite la GUI possono essere eseguite tramite una stored procedure di sistema. Ad esempio, alcune delle operazioni che puoi eseguire con le stored procedure di sistema includono:

  • Configura account di sicurezza
  • Configura server collegati
  • Crea un piano di manutenzione del database
  • Crea cataloghi di ricerca full-text
  • Aggiungi accesso remoto
  • Configura replica
  • Imposta lavori pianificati
  • e molto altro...

Le stored procedure di sistema sono precedute da sp_ , quindi è meglio evitare di utilizzare quel prefisso per le tue procedure.

Convenzioni di denominazione

È una buona idea sviluppare una convenzione di denominazione coerente per le tue stored procedure (e per tutti gli altri oggetti nel tuo database).

Alcune persone antepongono alle loro stored procedure usp_ (per indicare una procedura memorizzata definita dall'utente), altri la iniziano con una parola chiave SQL come select , inserisci , aggiornamento , elimina . Altri usano un'abbreviazione per l'applicazione.

Alcuni usano i trattini bassi per separare ogni parola nella procedura memorizzata (ad esempio, recent_albums ), mentre altri utilizzeranno le maiuscole e minuscole (ad esempio, RecentAlbums ).

Pertanto, è possibile che la nostra procedura memorizzata possa essere denominata in uno dei seguenti modi, a seconda della convenzione di denominazione utilizzata.

  • Album recenti
  • album_recenti
  • uspRecentAlbums
  • usp_recent_albums
  • seleziona Album recenti
  • seleziona_Album recenti
  • select_recent_albums
  • getRecentAlbums
  • get_recent_albums

Ottieni l'immagine. L'importante è la coerenza. Scegline uno e mantienilo. Semplificherà l'utilizzo di una procedura memorizzata. Immagina di avere punteggi, o anche centinaia di stored procedure, e ogni volta che vai a eseguirne uno, devi accedervi in ​​Esplora oggetti semplicemente perché non riesci a ricordare se l'hai chiamato usp_RecentAlbums o uspRecentAlbums .

Come accennato, evita di usare sp_ come prefisso per i nomi delle procedure memorizzate. SQL Server utilizza questo prefisso per le stored procedure di sistema.

SQL Server esegue prima la ricerca nelle stored procedure di sistema, quindi, nella migliore delle ipotesi, subirai un calo delle prestazioni. Nel peggiore dei casi, la tua procedura non verrà eseguita (se condivide un nome con una stored procedure di sistema).