Eseguire una stored procedureExecute a Stored Procedure

Per il contenuto relativo alle versioni precedenti di SQL Server, vedere Eseguire una stored procedure.For content related to previous versions of SQL Server, see Execute a Stored Procedure.

In questo argomento viene illustrato come eseguire una stored procedure in SQL Server 2017SQL Server 2017 utilizzando SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to execute a stored procedure in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Sono disponibili due modi diversi per eseguire una stored procedure.There are two different ways to execute a stored procedure. Il primo e più comune approccio consiste nella chiamata della stored procedure da parte di un'applicazione o un utente.The first and most common approach is for an application or user to call the procedure. Il secondo approccio consiste nell'impostare la stored procedure per l'esecuzione automatica all'avvio di un'istanza di SQL ServerSQL Server .The second approach is to set the procedure to run automatically when an instance of SQL ServerSQL Server starts. Quando una stored procedure viene chiamata da un'applicazione o da un utente, la parola chiave Transact-SQLTransact-SQL EXECUTE o EXEC viene dichiarata in modo esplicito nella chiamata.When a procedure is called by an application or user, the Transact-SQLTransact-SQL EXECUTE or EXEC keyword is explicitly stated in the call. In alternativa, è possibile chiamare ed eseguire la stored procedure senza la parola chiave se la stored procedure è la prima istruzione nel batch Transact-SQLTransact-SQL .Alternatively, the procedure can be called and executed without the keyword if the procedure is the first statement in the Transact-SQLTransact-SQL batch.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Le regole di confronto del database chiamante vengono utilizzate per la ricerca dei nomi delle stored procedure di sistema corrispondenti.The calling database collation is used when matching system procedure names. Nei nomi delle stored procedure di sistema nelle chiamate alle stored procedure è pertanto necessario utilizzare sempre la corretta combinazione di maiuscole e minuscole.Therefore, always use the exact case of system procedure names in procedure calls. 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:For example, this code will fail if it is executed in the context of a database that has a case-sensitive collation:

    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 .To display the exact system procedure names, query the sys.system_objects and sys.system_parameters catalog views.

  • Se una stored procedure definita dall'utente ha lo stesso nome di una stored procedure di sistema, potrebbe non essere possibile eseguire la prima.If a user-defined procedure has the same name as a system procedure, the user-defined procedure might not ever execute.

Indicazioni Recommendations

  • Esecuzione di stored procedure di sistemaExecuting System Stored Procedures

    Le stored procedure di sistema iniziano con il prefisso sp_.System procedures begin with the prefix 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.Because they logically appear in all user- and system- defined databases, they can be executed from any database without having to fully quality the procedure name. È tuttavia consigliabile specificare lo schema in tutti i nomi di stored procedure di sistema con il nome dello schema sys per evitare conflitti.However, we recommend schema-qualifying all system procedure names with the sys schema name to prevent name conflicts. Nell'esempio seguente viene illustrato il metodo consigliato per la chiamata a una stored procedure di sistema.The following example demonstrates the recommended method of calling a system procedure.

    EXEC sys.sp_who;  
    
  • Esecuzione di stored procedure definite dall'utenteExecuting User-defined Stored Procedures

    Quando si esegue una stored procedure definita dall'utente, si consiglia di specificare il nome completo della stored procedure con il nome di schema.When executing a user-defined procedure, we recommend qualifying the procedure name with the schema name. In questo modo, le prestazioni risulteranno leggermente migliorate poiché si evita che debbano essere eseguite ricerche in più schemi tramite il Motore di databaseDatabase Engine .This practice gives a small performance boost because the Motore di databaseDatabase Engine does not have to search multiple schemas. Si evita inoltre che venga eseguita la stored procedure errata se un database dispone di stored procedure con lo stesso nome in più schemi.It also prevents executing the wrong procedure if a database has procedures with the same name in multiple schemas.

    Nell'esempio seguente viene illustrato il metodo consigliato per l'esecuzione di una stored procedure definita dall'utente.The following example demonstrates the recommended method to execute a user-defined procedure. Si noti che la stored procedure accetta un parametro di input.Notice that the procedure accepts one input parameter. Per informazioni su come specificare i parametri di input e di output, vedere Specificare i parametri.For information about specifying input and output parameters, see Specify Parameters.

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

    Oppure-Or-

    EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50;  
    GO  
    

    Se si specifica una stored procedure non qualificata definita dall'utente, il Motore di databaseDatabase Engine cerca la stored procedure nell'ordine seguente:If a nonqualified user-defined procedure is specified, the Motore di databaseDatabase Engine searches for the procedure in the following order:

    1. Schema sys del database corrente.The sys schema of the current database.

    2. Schema predefinito del chiamante se eseguito in un batch o in SQL dinamico.The caller's default schema if it is executed in a batch or in dynamic SQL. 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.Or, if the nonqualified procedure name appears inside the body of another procedure definition, the schema that contains this other procedure is searched next.

    3. Schema dbo nel database corrente.The dbo schema in the current database.

  • Esecuzione automatica di stored procedureExecuting Stored Procedures Automatically

    Le stored procedure contrassegnate per l'esecuzione automatica vengono eseguite a ogni avvio di SQL ServerSQL Server e il database master viene recuperato durante il processo di avvio.Procedures marked for automatic execution are executed every time SQL ServerSQL Server starts and the master database is recovered during that startup process. 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.Setting up procedures to execute automatically can be useful for performing database maintenance operations or for having procedures run continuously as background processes. È 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.Another use for automatic execution is to have the procedure perform system or maintenance tasks in tempdb, such as creating a global temporary table. In questo modo si è sempre certi della disponibilità di una tabella temporanea quando tempdb viene ricreato durante l'avvio di SQL ServerSQL Server .This makes sure that such a temporary table will always exist when tempdb is re-created during SQL ServerSQL Server startup.

    Una stored procedure eseguita automaticamente utilizza le stesse autorizzazioni dei membri del ruolo predefinito del server sysadmin .A procedure that is automatically executed operates with the same permissions as members of the sysadmin fixed server role. I messaggi di errore generati dalla stored procedure vengono scritti nel log degli errori di SQL ServerSQL Server .Any error messages generated by the procedure are written to the SQL ServerSQL Server error log.

    Non è previsto alcun limite per le procedure di avvio, ma è necessario tenere presente che ogni procedura richiede un thread di lavoro per l'esecuzione.There is no limit to the number of startup procedures you can have, but be aware that each consumes one worker thread while executing. 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.If you must execute multiple procedures at startup but do not need to execute them in parallel, make one procedure the startup procedure and have that procedure call the other procedures. In questo modo è sufficiente un solo thread di lavoro.This uses only one worker thread.

    Suggerimento

    Evitare di restituire set di risultati da una stored procedure eseguita automaticamente.Do not return any result sets from a procedure that is executed automatically. Poiché la stored procedure viene eseguita da SQL ServerSQL Server anziché da un'applicazione o un utente, non è disponibile una destinazione per i set di risultati.Because the procedure is being executed by SQL ServerSQL Server instead of an application or user, there is nowhere for the result sets to go.

  • Impostazione, annullamento e controllo dell'esecuzione automaticaSetting, Clearing, and Controlling Automatic Execution

    Solo l'amministratore di sistema (sa) può contrassegnare una stored procedure per l'esecuzione automatica.Only the system administrator (sa) can mark a procedure to execute automatically. La stored procedure, inoltre, deve essere nel database master , il proprietario deve essere sae deve essere priva di parametri di input o output.In addition, the procedure must be in the master database, owned by sa, and cannot have input or output parameters.

    Usare sp_procoption per:Use sp_procoption to:

    1. Designare una stored procedure esistente come procedura di avvio.Designate an existing procedure as a startup procedure.

    2. Arrestare l'esecuzione di una stored procedure all'avvio di SQL ServerSQL Server .Stop a procedure from executing at SQL ServerSQL Server startup.

Sicurezza Security

Per altre informazioni, vedere EXECUTE AS (Transact-SQL) e Clausola EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS (Transact-SQL) and EXECUTE AS Clause (Transact-SQL).

Autorizzazioni Permissions

Per altre informazioni, vedere la sezione Autorizzazioni in EXECUTE (Transact-SQL).For more information, see the "Permissions" section in EXECUTE (Transact-SQL).

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Per eseguire una stored procedureTo execute a stored procedure

  1. In Esplora oggetticonnettersi a un'istanza di Motore di database di SQL ServerSQL Server Database Engine, espandere tale istanza, quindi espandere Database.In Object Explorer, connect to an instance of the Motore di database di SQL ServerSQL Server Database Engine, expand that instance, and then expand Databases.

  2. Espandere il database desiderato, espandere Programmabilità, quindi Stored procedure.Expand the database that you want, expand Programmability, and then expand Stored Procedures.

  3. Fare clic con il pulsante destro del mouse sulla stored procedure definita dall'utente desiderata e scegliere Esegui stored procedure.Right-click the user-defined stored procedure that you want and click Execute 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.In the Execute Procedure dialog box, specify a value for each parameter and whether it should pass a null value.

    ParametroParameter
    Indica il nome del parametro.Indicates the name of the parameter.

    Tipo di datiData Type
    Indica il tipo di dati del parametro.Indicates the data type of the parameter.

    Parametro di outputOutput Parameter
    Indica se il parametro è un parametro di output.Indicates if this is an output parameter.

    Passa valore NullPass Null Value
    Consente di passare NULL come valore del parametro.Pass a NULL as the value of the parameter.

    ValoreValue
    Digitare il valore del parametro al momento della chiamata alla procedura.Type the value for the parameter when calling the procedure.

  5. Per eseguire la stored procedure, fare clic su OK.To execute the stored procedure, click OK.

Utilizzo di Transact-SQL Using Transact-SQL

Per eseguire una stored procedureTo execute a stored procedure

  1. Connettersi al Motore di databaseDatabase Engine.Connect to the Motore di databaseDatabase Engine.

  2. Dalla barra Standard fare clic su Nuova query.From the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. In questo esempio viene illustrato come eseguire una stored procedure che prevede un parametro.This example shows how to execute a stored procedure that expects one parameter. Nell'esempio viene eseguita la stored procedure uspGetEmployeeManagers con il valore 6 specificato come parametro @EmployeeID .The example executes the uspGetEmployeeManagers stored procedure with the value 6 specified as the @EmployeeID parameter.

USE AdventureWorks2012;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

Per impostare o annullare l'esecuzione automatica di una stored procedureTo set or clear a procedure for executing automatically

  1. Connettersi al Motore di databaseDatabase Engine.Connect to the Motore di databaseDatabase Engine.

  2. Dalla barra Standard fare clic su Nuova query.From the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. Questo esempio mostra come usare sp_procoption per impostare una stored procedure per l'esecuzione automatica.This example shows how to use sp_procoption to set a procedure for automatic execution.

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

Per arrestare l'esecuzione automatica di una stored procedureTo stop a procedure from executing automatically

  1. Connettersi al Motore di databaseDatabase Engine.Connect to the Motore di databaseDatabase Engine.

  2. Dalla barra Standard fare clic su Nuova query.From the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. Questo esempio mostra come usare sp_procoption per arrestare l'esecuzione automatica di una stored procedure.This example shows how to use sp_procoption to stop a procedure from executing automatically.

USE AdventureWorks2012;  
GO  
EXEC sp_procoption @ProcName = '<procedure name>'   
    , @OptionValue = 'off';  

Esempio (Transact-SQL) Example (Transact-SQL)

Vedere ancheSee Also

Specificare i parametri Specify Parameters
Configurare l'opzione di configurazione del server scan for startup procs Configure the scan for startup procs Server Configuration Option
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
Stored procedure (Motore di database) Stored Procedures (Database Engine)