Condividi tramite


Eseguire una procedura memorizzata

Si applica a:SQL ServerAzure SQL DatabaseIstanza gestita di Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Database SQL in Microsoft Fabric

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

Sono disponibili diversi modi per eseguire una stored procedure. Il primo e più comune approccio è che un'applicazione o un utente chiami la procedura. 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 dichiarazione della 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 corrispondenza dei nomi delle procedure di sistema. Per questo motivo, usare sempre l'esatta combinazione di maiuscole e minuscole nei nomi delle procedure di sistema nelle chiamate di procedura. 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 procedure di sistema, eseguire una query sulle viste 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, la stored procedure definita dall'utente potrebbe non venire mai eseguita.

Consigli

Utilizzare le seguenti raccomandazioni per l'esecuzione delle stored procedure.

Stored procedure di sistema

Le 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 procedura. È comunque consigliabile qualificare tutti i nomi delle procedure di sistema specificando il nome dello schema sys per evitare conflitti di nomi. Nell'esempio seguente viene illustrato il metodo consigliato per chiamare una procedura di sistema.

EXEC sys.sp_who;  

Procedure memorizzate 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 eseguire una procedura 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 viene specificata una procedura definita dall'utente non qualificata, il motore di database cerca la procedura nell'ordine seguente:

  1. Lo schema sys del database corrente.

  2. Lo schema predefinito del chiamante se la procedura viene eseguita in un batch o in SQL dinamico. Se il nome non qualificato della procedura appare all'interno del corpo della definizione di un'altra procedura, verrà poi cercato nello schema che contiene questa seconda procedura.

  3. Schema dbo nel database corrente.

Sicurezza

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

Autorizzazioni

Per informazioni sui permessi, vedere Permessi in EXECUTE (Transact-SQL).

Esecuzione di stored procedure

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

Usare SQL Server Management Studio

  1. In Esplora oggetti, connettersi a un'istanza di SQL Server o di Azure SQL Database, espandere quell'istanza, quindi espandere Database.

  2. Espandi il database desiderato, espandi Programmabilità, e poi espandi Stored Procedures.

  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 procedura memorizzata, selezionare OK. Se la stored procedure non contiene parametri, è sufficiente selezionare OK.

    La procedura memorizzata viene eseguita e i risultati appaiono 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 FirstNameChris, LastNameCannon, and CompanyNameOutdoor Sporting Goods.

Usare Transact-SQL in una finestra di query

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

  2. Dala barra degli strumenti selezionare Nuova query.

  3. Immettere nella finestra della query un'istruzione EXECUTE utilizzando 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 procedura memorizzata 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 opzioni differenti 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 ogni volta che SQL Server viene avviato e il database master viene recuperato durante quel 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.

Un altro utilizzo dell'esecuzione automatica è di fare in modo che la procedura esegua attività di sistema o di manutenzione in tempdb, come creare una tabella temporanea globale. L'esecuzione automatica garantisce che una tale tabella temporanea esista sempre quando tempdb viene ricreata durante l'avvio di SQL Server.

Una procedura eseguita automaticamente utilizza le stesse autorizzazioni dei membri del ruolo predefinito del server sysadmin. I messaggi di errore generati dalla procedura 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 procedura viene eseguita da SQL Server anziché da un'applicazione o un utente, i set di risultati non hanno un luogo in cui andare.

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ò segnare una procedura per eseguire automaticamente.

  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.

Impedire l'esecuzione automatica di una procedura all'avvio

Un 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. Nella finestra 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.