Eseguire una stored procedure

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

Sono disponibili due modi 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. Il secondo approccio consiste nell'impostare la stored procedure per l'esecuzione automatica 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. In alternativa, è possibile chiamare ed eseguire la stored procedure senza la parola chiave se la stored procedure è la prima istruzione nel batch Transact-SQL.

Prima di iniziare

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, genererà un errore:

EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not 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

Eseguire 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, 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;  

Eseguire 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. Si evita inoltre che venga eseguita la stored procedure errata se un database dispone di stored procedure con lo stesso nome in più schemi.

Nell'esempio seguente viene illustrato il metodo consigliato per l'esecuzione di una stored procedure definita dall'utente. Si noti che la stored procedure accetta un parametro di input. Per informazioni su come specificare i parametri di input e di output, vedere Specificare i parametri.

USE AdventureWorks2019;  
GO  
EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
GO

Oppure

EXEC AdventureWorks2019.dbo.uspGetEmployeeManagers 50;  
GO  

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

  1. Schema sys del database corrente.

  2. Schema predefinito del chiamante se eseguito in un batch o in SQL dinamico. In alternativa, 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.

Eseguire le stored procedure automaticamente

Le stored procedure contrassegnate per l'esecuzione automatica 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. In questo modo si è sempre certi della disponibilità 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 per le 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, è possibile impostare una delle procedure come procedura di avvio che richiama le altre procedure. In questo modo è 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.

Impostare, cancellare e controllare l'esecuzione automatica

Solo l'amministratore di sistema (sa) può contrassegnare una stored procedure per l'esecuzione automatica. La stored procedure, inoltre, deve essere nel database master , il proprietario deve essere sae deve essere priva di parametri di input o output.

Usare sp_procoption per:

  1. Designare una stored procedure esistente come procedura di avvio.

  2. Arrestare l'esecuzione di una stored procedure all'avvio di SQL Server.

Sicurezza

Per altre informazioni, vedere EXECUTE AS (Transact-SQL) e EXECUTE AS Clause (Transact-SQL).

Autorizzazioni

Per altre informazioni, vedere la sezione "Autorizzazioni" in EXECUTE (Transact-SQL).

Uso di SQL Server Management Studio

Eseguire una stored procedure

  1. In Esplora oggetti, connettersi a un'istanza del motore di database di SQL Server, espanderla e 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 definita dall'utente desiderata e scegliere Esegui stored procedure.

  4. Nella finestra di dialogo Esegui stored procedure specificare un valore per ogni parametro e indicare se deve essere passato un valore Null.

    Parametro
    Indica il nome del parametro.

    Tipo di dati
    Indica il tipo di dati del parametro.

    Parametro di output
    Indica se il parametro è un parametro di output.

    Passa valore Null
    Consente di passare NULL come valore del parametro.

    Valore
    Digitare il valore del parametro al momento della chiamata alla procedura.

  5. Per eseguire la stored procedure, selezionare OK.

Uso di Transact-SQL

Eseguire una stored procedure

  1. Connettersi al motore di database.

  2. Nella barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. In questo esempio viene illustrato come eseguire una stored procedure che prevede un parametro. Nell'esempio viene eseguita la stored procedure uspGetEmployeeManagers con il valore 6 specificato come parametro @EmployeeID.

USE AdventureWorks2019;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

Impostare o annullare l'esecuzione automatica di una stored procedure

Le procedure di avvio devono essere incluse nel database master e non possono contenere parametri INPUT o OUTPUT. L'esecuzione delle stored procedure inizia quando tutti i database sono stati recuperati e il messaggio relativo al completamento del recupero viene registrato all'avvio.

Per altre informazioni, vedere sp_procoption (Transact-SQL).

  1. Connettersi al motore di database.

  2. Nella barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. Questo esempio mostra come usare sp_procoption per impostare una stored procedure per l'esecuzione automatica.

EXEC sp_procoption @ProcName = N'<procedure name>'   
    , @OptionName = 'startup'   
    , @OptionValue = 'on';
GO

Arrestare l'esecuzione automatica di una stored procedure

  1. Connettersi al motore di database.

  2. Nella barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. Questo esempio mostra come usare sp_procoption per arrestare l'esecuzione automatica di una stored procedure.

EXEC sp_procoption @ProcName = N'<procedure name>'      
    , @OptionName = 'startup'
    , @OptionValue = 'off';
GO

Passaggi successivi