Eseguire una stored procedure
In questo argomento viene illustrato come eseguire una stored procedure in SQL Server 2012 utilizzando 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.
Contenuto dell'argomento
Prima di iniziare:
Limitazioni e restrizioni
Consigli
Sicurezza
Per eseguire una stored procedure tramite:
SQL Server Management Studio
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. Nei nomi delle stored procedure di sistema nelle chiamate alle stored procedure è pertanto necessario utilizzare sempre la corretta combinazione di maiuscole e minuscole. 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
Esecuzione di 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;
Esecuzione di 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 AdventureWorks2012; GO EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
-oppure-
EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50; GO
Se si specifica una stored procedure non qualificata definita dall'utente, il Motore di database cerca la stored procedure nell'ordine seguente:
Schema sys del database corrente.
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.
Schema dbo nel database corrente.
Esecuzione automatica di stored procedure
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 garantisce che esista sempre 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.
Impostazione, annullamento e controllo dell'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 sa e deve essere priva di parametri di input o output.
Utilizzare la stored procedure sp_procoption per:
Designare una stored procedure esistente come procedura di avvio.
Arrestare l'esecuzione di una stored procedure all'avvio di SQL Server.
Sicurezza
Per ulteriori informazioni, vedere EXECUTE AS (Transact-SQL) e Clausola EXECUTE AS (Transact-SQL).
Autorizzazioni
Per ulteriori informazioni, vedere la sezione Autorizzazioni in EXECUTE (Transact-SQL).
[Inizio pagina]
Utilizzo di SQL Server Management Studio
Per eseguire una stored procedure
In Esplora oggetti connettersi a un'istanza di Motore di database di SQL Server, espandere tale istanza, quindi espandere Database.
Espandere il database desiderato, espandere Programmabilità, quindi Stored procedure.
Fare clic con il pulsante destro del mouse sulla stored procedure definita dall'utente desiderata e fare clic su Esegui stored procedure.
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.
Per eseguire la stored procedure, fare clic su OK.
[Inizio pagina]
Utilizzo di Transact-SQL
Per eseguire una stored procedure
Connettersi al Motore di database.
Dalla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su 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 AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
Per impostare o annullare l'esecuzione automatica di una stored procedure
Connettersi al Motore di database.
Dalla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui. In questo esempio viene illustrato come utilizzare sp_procoption per impostare una stored procedure per l'esecuzione automatica.
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionName = ] 'startup'
, @OptionValue = 'on';
Per arrestare l'esecuzione automatica di una stored procedure
Connettersi al Motore di database.
Dalla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui. In questo esempio viene illustrato come utilizzare sp_procoption per arrestare l'esecuzione automatica di una stored procedure.
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionValue = 'off';
Esempio (Transact-SQL)
[Inizio pagina]
Vedere anche
Riferimento
CREATE PROCEDURE (Transact-SQL)
Concetti
Configurare l'opzione di configurazione del server scan for startup procs