Eseguire una stored procedure

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Questo articolo illustra come eseguire una stored procedure in SQL Server usando SQL Server Management Studio o Transact-SQL.

Sono disponibili diversi diversi per eseguire una stored procedure. Il primo e più comune approccio consiste nella chiamata della stored procedure da parte di un'applicazione o un utente. Un altro approccio consiste nell'impostare l'esecuzione automatica della stored procedure all'avvio di un'istanza di SQL Server.

Quando una stored procedure viene chiamata da un'applicazione o da un utente, la parola chiave Transact-SQL EXECUTE o EXEC viene dichiarata in modo esplicito nella chiamata. È possibile chiamare ed eseguire la stored procedure senza la parola chiave EXEC, se la stored procedure è la prima istruzione nel batch Transact-SQL.

Limitazioni e restrizioni

Le regole di confronto del database chiamante vengono utilizzate per la ricerca dei nomi delle stored procedure di sistema corrispondenti. Per questo motivo, usare sempre la corretta combinazione di maiuscole e minuscole nei nomi delle stored procedure di sistema. Ad esempio, il codice seguente, se eseguito nel contesto di un database con regole di confronto con distinzione tra maiuscole e minuscole, genera un errore:

EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help  

Per visualizzare i nomi esatti delle stored procedure di sistema, eseguire query nelle viste del catalogo sys.system_objects e sys.system_parameters .

Se una stored procedure definita dall'utente ha lo stesso nome di una stored procedure di sistema, potrebbe non essere possibile eseguire la prima.

Consigli

Attenersi alle raccomandazioni seguenti per l'esecuzione delle stored procedure.

Stored procedure di sistema

Le stored procedure di sistema iniziano con il prefisso sp_. Poiché sono visualizzate logicamente in ogni database definito dall'utente e dal sistema, le procedure di sistema possono essere eseguite da qualsiasi database senza che sia necessario specificare il nome completo della stored procedure. È tuttavia consigliabile specificare lo schema in tutti i nomi di stored procedure di sistema con il nome dello schema sys per evitare conflitti. Nell'esempio seguente viene illustrato il metodo consigliato per la chiamata a una stored procedure di sistema.

EXEC sys.sp_who;  

Stored procedure definite dall'utente

Quando si esegue una stored procedure definita dall'utente, si consiglia di specificare il nome completo della stored procedure con il nome di schema. In questo modo, le prestazioni risulteranno leggermente migliorate poiché si evita che debbano essere eseguite ricerche in più schemi tramite il motore di database. L'uso del nome di schema evita inoltre che venga eseguita la stored procedure errata, se un database dispone di stored procedure con lo stesso nome in più schemi.

Negli esempi seguenti viene illustrato il metodo consigliato per l'esecuzione di una stored procedure definita dall'utente. Questa procedura accetta due parametri di input. Per informazioni su come specificare i parametri di input e di output, vedere Specificare i parametri in una stored procedure.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

Oppure:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

Se si specifica una stored procedure definita dall'utente non qualificata, il motore di database cerca la stored procedure nell'ordine seguente:

  1. Lo schema sys del database corrente.

  2. Lo schema predefinito del chiamante se la stored procedure è eseguita in un batch o in SQL dinamico. Se il nome della stored procedure non completo viene visualizzato all'interno del corpo di un'altra definizione di stored procedure, la ricerca viene eseguita nello schema che contiene quest'ultima subito dopo.

  3. Schema dbo nel database corrente.

Sicurezza

Per informazioni sulla sicurezza, vedere EXECUTE AS (Transact-SQL) e Clausola EXECUTE AS (Transact-SQL).

Autorizzazioni

Per altre informazioni relative alle autorizzazioni, Autorizzazioni in EXECUTE (Transact-SQL).

Esecuzione di stored procedure

È possibile usare l'interfaccia utente di SQL Server Management Studio (SSMS) o Transact-SQL in una intervallo di query di SSMS per eseguire una stored procedure. Usare sempre l'ultima versione di SSMS.

Usare SQL Server Management Studio

  1. In Esplora oggetti, connettersi a un'istanza del motore di database di SQL Server o del database SQL di Azure, espanderla, quindi espandere Database.

  2. Espandere il database desiderato, espandere Programmabilità, quindi Stored procedure.

  3. Fare clic con il pulsante destro del mouse sulla stored procedure che si intende eseguire e selezionare Esegui stored procedure.

  4. Nella finestra di dialogo Esegui stored procedure Parametro indica il nome di ogni parametro, Tipo di dati indica il tipo di dati e Parametro di output indica se si tratta di un parametro di output.

    Per ogni parametro:

    • Alla voce Valore digitare il valore da usare per il parametro.
    • Alla voce Passa valore Null selezionare per stabilire se passare NULL come valore del parametro.
  5. Per eseguire la stored procedure, selezionare OK. Se la stored procedure non contiene parametri, è sufficiente selezionare OK.

    La stored procedure viene eseguita e i risultati vengono visualizzati nel riquadro dei Risultati .

    Ad esempio, per eseguire la stored procedure SalesLT.uspGetCustomerCompany dall'articolo Creare una stored procedure immettere Cannon per il parametro @LastName e Chris per il parametro @FirstName, quindi selezionare OK. La procedura restituisce FirstName Chris, LastName Cannon, and CompanyName Outdoor Sporting Goods.

Usare Transact-SQL in un intervallo di query

  1. In SSMS connettersi a un'istanza di SQL Server o del database SQL di Azure.

  2. Dala barra degli strumenti selezionare Nuova query.

  3. Immettere nell'intervallo di query un'istruzione EXECUTE con la sintassi seguente specificando i valori per tutti i parametri previsti:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Ad esempio, la seguente istruzione di Transact-SQL esegue la stored procedure uspGetCustomerCompany, con Cannon come valore del parametro @LastName e Chris come valore del parametro @FirstName:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Dalla barra degli strumenti selezionare Esegui. La stored procedure viene eseguita.

Opzioni per i valori dei parametri

Esistono diversi modi per specificare parametri e valori nelle istruzioni EXECUTE della stored procedure. Negli esempi seguenti vengono mostrate diverse opzioni per l'istruzione EXECUTE.

  • Se si forniscono i valori dei parametri nello stesso ordine in cui sono definiti nella stored procedure, non è necessario specificare i nomi dei parametri. Ad esempio:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • Se si forniscono i nomi dei parametri nel modello @parameter_name=value, non è necessario specificare i nomi e i valori dei parametri nello stesso ordine in cui sono definiti. Ad esempio, è valida una delle istruzioni seguenti:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    oppure:

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Se si utilizza il modulo @parameter_name=value per qualsiasi parametro, è necessario usarlo per tutti i parametri successivi in tale istruzione. Ad esempio, non puoi usare EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.

Esecuzione automatica all'avvio

Si applica a: SQL Server

In SQL Server un membro del ruolo del server sysadmin può usare sp_procoption per impostare o cancellare una procedura per l'esecuzione automatica all'avvio. Le procedure di avvio devono essere incluse nel database master, devono essere possedute da sa e non possono contenere parametri di input o di output. Per altre informazioni, vedere sp_procoption (Transact-SQL).

Le stored procedure contrassegnate per l'esecuzione automatica all'avvio vengono eseguite a ogni avvio di SQL Server e il database master viene recuperato durante il processo di avvio. L'impostazione di stored procedure per l'esecuzione automatica può essere utile per le operazioni di manutenzione del database o per l'esecuzione continua delle stored procedure come processi di background.

È inoltre possibile utilizzare l'esecuzione automatica delle stored procedure per eseguire attività di sistema o di manutenzione in tempdb, ad esempio per creare una tabella temporanea globale. L'esecuzione automatica assicura della disponibilità continua di una tabella temporanea quando tempdb viene ricreato durante l'avvio di SQL Server.

Una stored procedure eseguita automaticamente utilizza le stesse autorizzazioni dei membri del ruolo predefinito del server sysadmin. I messaggi di errore generati dalla stored procedure vengono scritti nel log degli errori di SQL Server.

Non è previsto alcun limite al numero delle procedure di avvio, ma è necessario tenere presente che ogni procedura richiede un thread di lavoro per l'esecuzione. Se è necessario eseguire più procedure all'avvio, ma non necessariamente in parallelo, impostare una delle procedure come procedura di avvio che richiami le altre procedure. Per questo metodo è sufficiente un solo thread di lavoro.

Suggerimento

Evitare di restituire set di risultati da una stored procedure eseguita automaticamente. Poiché la stored procedure viene eseguita da SQL Server anziché da un'applicazione o un utente, non è disponibile una destinazione per i set di risultati.

Nota

Il database SQL di Azure è progettato per isolare le funzionalità da tutte le dipendenze nel database master. Di conseguenza, le istruzioni di Transact-SQL che configurano le opzioni a livello server non sono disponibili in Azure SQL. Spesso da altri servizi di Azure è possibile trovare alternative appropriate, ad esempio i Processi elastici o Automazione di Azure.

Impostare una procedura da eseguire automaticamente all'avvio

Solo l'amministratore di sistema (sa) può impostare l'esecuzione automatica di una stored procedure.

  1. In SSMS connettersi al motore di database.

  2. Dalla barra degli strumenti Standard selezionare Nuova query.

  3. Immettere i seguenti comandi sp_procoption per impostare una stored procedure da eseguire automaticamente all'avvio di SQL Server.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. Nella barra degli strumenti selezionare Esegui.

Arrestare l'esecuzione automatica di una stored procedure all'avvio

sysadmin può usare sp_procoption per arrestare l'esecuzione automatica di una stored procedure all'avvio di SQL Server.

  1. In SSMS connettersi al motore di database.

  2. Dalla barra degli strumenti Standard selezionare Nuova query.

  3. Nell'intervallo di query immettere i comandi seguenti.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Nella barra degli strumenti selezionare Esegui.