EXECUTE (Transact-SQL)EXECUTE (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Esegue una stringa di comando o una stringa di caratteri all'interno di un Transact-SQLTransact-SQL batch o uno dei seguenti moduli: sistema stored procedure, stored procedure definita dall'utente, stored procedure CLR, funzione definita dall'utente a valori scalari o stored procedure estesa.Executes a command string or character string within a Transact-SQLTransact-SQL batch, or one of the following modules: system stored procedure, user-defined stored procedure, CLR stored procedure, scalar-valued user-defined function, or extended stored procedure. L'istruzione EXECUTE può essere utilizzata per inviare comandi pass-through ai server collegati.The EXECUTE statement can be used to send pass-through commands to linked servers. È inoltre possibile impostare in modo esplicito il contesto di esecuzione di una stringa o di un comando.Additionally, the context in which a string or command is executed can be explicitly set. I metadati per il set di risultati possono essere definiti tramite le opzioni WITH RESULT SETS.Metadata for the result set can be defined by using the WITH RESULT SETS options.

Importante

Prima di chiamare l'istruzione EXECUTE con una stringa di caratteri, convalidare la stringa di caratteri.Before you call EXECUTE with a character string, validate the character string. Non eseguire mai un comando costruito in base a input utente non convalidato.Never execute a command constructed from user input that has not been validated.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server  

Execute a stored procedure or function  
[ { EXEC | EXECUTE } ]  
    {   
      [ @return_status = ]  
      { module_name [ ;number ] | @module_name_var }   
        [ [ @parameter = ] { value   
                           | @variable [ OUTPUT ]   
                           | [ DEFAULT ]   
                           }  
        ]  
      [ ,...n ]  
      [ WITH <execute_option> [ ,...n ] ]  
    }  
[;]  

Execute a character string  
{ EXEC | EXECUTE }   
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )  
    [ AS { LOGIN | USER } = ' name ' ]  
[;]  

Execute a pass-through command against a linked server  
{ EXEC | EXECUTE }  
    ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]  
        [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]  
    )   
    [ AS { LOGIN | USER } = ' name ' ]  
    [ AT linked_server_name ]  
[;]  

<execute_option>::=  
{  
        RECOMPILE   
    | { RESULT SETS UNDEFINED }   
    | { RESULT SETS NONE }   
    | { RESULT SETS ( <result_sets_definition> [,...n ] ) }  
}   

<result_sets_definition> ::=   
{  
    (  
         { column_name   
           data_type   
         [ COLLATE collation_name ]   
         [ NULL | NOT NULL ] }  
         [,...n ]  
    )  
    | AS OBJECT   
        [ db_name . [ schema_name ] . | schema_name . ]   
        {table_name | view_name | table_valued_function_name }  
    | AS TYPE [ schema_name.]table_type_name  
    | AS FOR XML   
}  
-- In-Memory OLTP   

Execute a natively compiled, scalar user-defined function  
[ { EXEC | EXECUTE } ]   
    {   
      [ @return_status = ]   
      { module_name | @module_name_var }   
        [ [ @parameter = ] { value   
                           | @variable   
                           | [ DEFAULT ]   
                           }  
        ]   
      [ ,...n ]   
      [ WITH <execute_option> [ ,...n ] ]   
    }  
<execute_option>::=  
{  
    | { RESULT SETS UNDEFINED }   
    | { RESULT SETS NONE }   
    | { RESULT SETS ( <result_sets_definition> [,...n ] ) }  
}  
-- Syntax for Azure SQL Database   

Execute a stored procedure or function  
[ { EXEC | EXECUTE } ]  
    {   
      [ @return_status = ]  
      { module_name  | @module_name_var }   
        [ [ @parameter = ] { value   
                           | @variable [ OUTPUT ]   
                           | [ DEFAULT ]   
                           }  
        ]  
      [ ,...n ]  
      [ WITH RECOMPILE ]  
    }  
[;]  

Execute a character string  
{ EXEC | EXECUTE }   
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )  
    [ AS {  USER } = ' name ' ]  
[;]  

<execute_option>::=  
{  
        RECOMPILE   
    | { RESULT SETS UNDEFINED }   
    | { RESULT SETS NONE }   
    | { RESULT SETS ( <result_sets_definition> [,...n ] ) }  
}   

<result_sets_definition> ::=   
{  
    (  
         { column_name   
           data_type   
         [ COLLATE collation_name ]   
         [ NULL | NOT NULL ] }  
         [,...n ]  
    )  
    | AS OBJECT   
        [ db_name . [ schema_name ] . | schema_name . ]   
        {table_name | view_name | table_valued_function_name }  
    | AS TYPE [ schema_name.]table_type_name  
    | AS FOR XML  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

-- Execute a stored procedure  
[ { EXEC | EXECUTE } ]  
    procedure_name   
        [ { value | @variable [ OUT | OUTPUT ] } ] [ ,...n ] }  
[;]  

-- Execute a SQL string  
{ EXEC | EXECUTE }  
    ( { @string_variable | [ N ] 'tsql_string' } [ +...n ] )  
[;]  

ArgomentiArguments

@return_status@return_status
Variabile di tipo integer facoltativa in cui viene archiviato lo stato di restituzione di un modulo.Is an optional integer variable that stores the return status of a module. Prima di utilizzare questa variabile in un'istruzione EXECUTE, è necessario dichiararla nel batch, nella stored procedure o nella funzione.This variable must be declared in the batch, stored procedure, or function before it is used in an EXECUTE statement.

Se utilizzata per richiamare una a valori scalari definita dall'utente (funzione), il @return_status variabile può essere di qualsiasi tipo di dati scalare.When used to invoke a scalar-valued user-defined function, the @return_status variable can be of any scalar data type.

nome_modulomodule_name
Nome completo o non qualificato della stored procedure o della funzione con valori scalari definita dall'utente da chiamare.Is the fully qualified or nonfully qualified name of the stored procedure or scalar-valued user-defined function to call. I nomi di modulo devono essere conforme alle regole per identificatori.Module names must comply with the rules for identifiers. Per i nomi delle stored procedure estese la combinazione di maiuscole e minuscole è sempre rilevante, indipendentemente dalle regole di confronto del server.The names of extended stored procedures are always case-sensitive, regardless of the collation of the server.

Un modulo che è possibile creare in un altro database può essere eseguito se l'utente che lo esegue è il proprietario del modulo o dispone delle autorizzazioni appropriate per eseguirlo in tale database.A module that has been created in another database can be executed if the user running the module owns the module or has the appropriate permission to execute it in that database. È possibile eseguire un modulo in un altro server che esegue SQL ServerSQL Server se l'utente che lo esegue dispone delle autorizzazioni appropriate per l'utilizzo di tale server (accesso remoto) e per l'esecuzione del modulo nel database specifico.A module can be executed on another server running SQL ServerSQL Server if the user running the module has the appropriate permission to use that server (remote access) and to execute the module in that database. Se si specifica il nome del server ma non quello del database, Motore di database di SQL ServerSQL Server Database Engine esegue automaticamente la ricerca del modulo nel database predefinito dell'utente.If a server name is specified but no database name is specified, the Motore di database di SQL ServerSQL Server Database Engine looks for the module in the default database of the user.

; numero;number
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

Numero intero facoltativo utilizzato per raggruppare le stored procedure con lo stesso nome.Is an optional integer that is used to group procedures of the same name. Questo parametro non viene usato per stored procedure estese.This parameter is not used for extended stored procedures.

Nota

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Per ulteriori informazioni sui gruppi di procedure, vedere CREATE PROCEDURE ( Transact-SQL ) .For more information about procedure groups, see CREATE PROCEDURE (Transact-SQL).

@module_name_var@module_name_var
Nome di una variabile definita localmente che rappresenta il nome di un modulo.Is the name of a locally defined variable that represents a module name.

Può trattarsi di una variabile che contiene il nome di una funzione compilata in modo nativo e scalare definite dall'utente.This can be a variable that holds the name of a natively compiled, scalar user-defined function.

@parametro@parameter
Il parametro per nome_modulo, come definito nel modulo.Is the parameter for module_name, as defined in the module. I nomi dei parametri devono iniziare con il simbolo di chiocciola (@).Parameter names must be preceded by the at sign (@). Quando si utilizza il @parameter_name=valore form, i nomi dei parametri e le costanti non è necessario essere specificati nell'ordine in cui sono definiti nel modulo.When used with the @parameter_name=value form, parameter names and constants do not have to be supplied in the order in which they are defined in the module. Tuttavia, se il @parameter_name=valore modulo viene utilizzato per qualsiasi parametro, deve essere utilizzata per tutti i parametri successivi.However, if the @parameter_name=value form is used for any parameter, it must be used for all subsequent parameters.

Per impostazione predefinita, i parametri ammettono valori Null.By default, parameters are nullable.

Valorevalue
Valore del parametro da passare al modulo o al comando pass-through.Is the value of the parameter to pass to the module or pass-through command. Se i nomi dei parametri vengono omessi, è necessario immettere i relativi valori in base all'ordine definito nel modulo.If parameter names are not specified, parameter values must be supplied in the order defined in the module.

Durante l'esecuzione di comandi pass-through in server collegati, l'ordine dei valori dei parametri dipende dal provider OLE DB del server collegato.When executing pass-through commands against linked servers, the order of the parameter values depends on the OLE DB provider of the linked server. La maggior parte dei provider OLE DB associa i valori ai parametri da sinistra a destra.Most OLE DB providers bind values to parameters from left to right.

Se il valore di un parametro è il nome di un oggetto, una stringa di caratteri o un nome qualificato dal nome del database o dello schema, l'intero nome deve essere racchiuso tra virgolette singole.If the value of a parameter is an object name, character string, or qualified by a database name or schema name, the whole name must be enclosed in single quotation marks. Se il valore di un parametro è rappresentato da una parola chiave, questa deve essere racchiusa tra virgolette doppie.If the value of a parameter is a keyword, the keyword must be enclosed in double quotation marks.

Se nel modulo è definito un valore predefinito, l'utente può eseguire il modulo senza specificare un parametro.If a default is defined in the module, a user can execute the module without specifying a parameter.

Il valore predefinito può essere inoltre NULL.The default can also be NULL. In genere nella definizione del modulo sono specificate le operazioni da eseguire se un valore di parametro è NULL.Generally, the module definition specifies the action that should be taken if a parameter value is NULL.

@variabile@variable
Variabile in cui è archiviato un parametro o un parametro restituito.Is the variable that stores a parameter or a return parameter.

OUTPUTOUTPUT
Specifica che il modulo o la stringa di comando restituisce un parametro.Specifies that the module or command string returns a parameter. Il parametro corrispondente nel modulo o nella stringa di comando deve essere creato tramite la parola chiave OUTPUT.The matching parameter in the module or command string must also have been created by using the keyword OUTPUT. Specificare questa parola chiave quando come parametri si utilizzano variabili di cursore.Use this keyword when you use cursor variables as parameters.

Se valore viene definito come OUTPUT di un modulo eseguito in un server collegato, qualsiasi modifica apportata al corrispondenteparametro eseguite da OLE DB provider verrà copiato nella variabile alla fine del esecuzione del modulo.If value is defined as OUTPUT of a module executed against a linked server, any changes to the corresponding @parameter performed by the OLE DB provider will be copied back to the variable at the end of the execution of module.

Se vengono utilizzati i parametri di OUTPUT e si desidera utilizzare i valori restituiti in altre istruzioni del batch di chiamata o di un modulo, il valore del parametro deve essere passato come variabile, ad esempioparametro = @variabile .If OUTPUT parameters are being used and the intent is to use the return values in other statements within the calling batch or module, the value of the parameter must be passed as a variable, such as @parameter = @variable. Non è possibile eseguire un modulo specificando la parola chiave OUTPUT per un parametro non definito come parametro OUTPUT nel modulo.You cannot execute a module by specifying OUTPUT for a parameter that is not defined as an OUTPUT parameter in the module. Le costanti non possono essere passate al modulo utilizzando la parola chiave OUTPUT. Il parametro restituito richiede il nome di una variabile.Constants cannot be passed to module by using OUTPUT; the return parameter requires a variable name. Prima di eseguire una procedura, è necessario dichiarare il tipo dei dati della variabile e assegnare un valore.The data type of the variable must be declared and a value assigned before executing the procedure.

Se si utilizza l'istruzione EXECUTE in una stored procedure remota oppure si esegue un comando pass-through in un server collegato, i parametri OUTPUT non possono essere di nessuno dei tipi di dati LOB.When EXECUTE is used against a remote stored procedure, or to execute a pass-through command against a linked server, OUTPUT parameters cannot be any one of the large object (LOB) data types.

I parametri restituiti possono essere di un tipo di dati qualsiasi, tranne i tipi di dati LOB.Return parameters can be of any data type except the LOB data types.

DEFAULTDEFAULT
Valore predefinito del parametro, come definito nel modulo.Supplies the default value of the parameter as defined in the module. Quando nel modulo è previsto un valore per un parametro privo di valore predefinito ed è stato omesso un parametro o è stata specificata la parola chiave DEFAULT, viene generato un errore.When the module expects a value for a parameter that does not have a defined default and either a parameter is missing or the DEFAULT keyword is specified, an error occurs.

@string_variable@string_variable
Nome di una variabile locale.Is the name of a local variable. @string_variable può essere qualsiasi char, varchar, nchar, o nvarchar tipo di dati. @string_variable can be any char, varchar, nchar, or nvarchar data type. Queste includono la (max) tipi di dati.These include the (max) data types.

[N] 'tsql_string'[N] 'tsql_string'
Valore stringa costante.Is a constant string. tsql_string può essere qualsiasi nvarchar o varchar tipo di dati.tsql_string can be any nvarchar or varchar data type. Se il valore N è incluso, la stringa viene interpretata come nvarchar tipo di dati.If the N is included, the string is interpreted as nvarchar data type.

AS <context_specification >AS <context_specification>
Specifica il contesto in cui viene eseguita l'istruzione.Specifies the context in which the statement is executed.

Account di accessoLOGIN
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

Specifica che il contesto da rappresentare è un account di accesso.Specifies the context to be impersonated is a login. L'ambito di rappresentazione è il server.The scope of impersonation is the server.

UtenteUSER
Specifica che il contesto da rappresentare è un utente nel database corrente.Specifies the context to be impersonated is a user in the current database. L'ambito di rappresentazione è limitato al database corrente.The scope of impersonation is restricted to the current database. Un cambio di contesto a un utente del database non eredita le autorizzazioni a livello di server di tale utente.A context switch to a database user does not inherit the server-level permissions of that user.

Importante

Mentre il cambio di contesto all'utente del database è attivo, qualsiasi tentativo di accesso alle risorse esterne al database comporterà l'esito negativo dell'esecuzione dell'istruzione.While the context switch to the database user is active, any attempt to access resources outside the database will cause the statement to fail. Ciò include l'utilizzo database istruzioni, le query distribuite e le query che fanno riferimento a un altro database usando identificatori in tre o quattro parti.This includes USE database statements, distributed queries, and queries that reference another database by using three- or four-part identifiers.

'nome''name'
Nome utente o nome account di accesso valido.Is a valid user or login name. nome deve essere un membro del ruolo predefinito del server sysadmin oppure esistere come entità nel Sys. database_principals o Sys. server_principals, rispettivamente.name must be a member of the sysadmin fixed server role or exist as a principal in sys.database_principals or sys.server_principals, respectively.

nome non può essere un account incorporato, ad esempio NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService o NT AUTHORITY\LocalSystem.name cannot be a built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.

Per ulteriori informazioni, vedere specificando un utente o un nome di accesso più avanti in questo argomento.For more information, see Specifying a User or Login Name later in this topic.

[N] 'command_string'[N] 'command_string'
Stringa costante contenente il comando da passare al server collegato.Is a constant string that contains the command to be passed through to the linked server. Se il valore N è incluso, la stringa viene interpretata come nvarchar tipo di dati.If the N is included, the string is interpreted as nvarchar data type.

[?][?]
Indica i parametri per il quale i valori vengono forniti nel <arg-list > di comandi pass-through che vengono utilizzati in EXEC('...', <arg-list>) in <server collegato > istruzione.Indicates parameters for which values are supplied in the <arg-list> of pass-through commands that are used in an EXEC('…', <arg-list>) AT <linkedsrv> statement.

IN linked_server_nameAT linked_server_name
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

Specifica che command_string viene eseguita su linked_server_name e, se presenti, vengono restituiti al client.Specifies that command_string is executed against linked_server_name and results, if any, are returned to the client. linked_server_name deve fare riferimento a una definizione di server collegato esistente nel server locale.linked_server_name must refer to an existing linked server definition in the local server. Server collegati definiti tramite sp_addlinkedserver.Linked servers are defined by using sp_addlinkedserver.

CON <execute_option >WITH <execute_option>
Opzioni di esecuzione possibili.Possible execute options. Le opzioni RESULT SETS non possono essere specificate in un'istruzione INSERT...EXEC.The RESULT SETS options cannot be specified in an INSERT…EXEC statement.

NomeTerm DefinizioneDefinition
RECOMPILERECOMPILE Forza la compilazione, l'utilizzo e l'eliminazione di un nuovo piano dopo l'esecuzione del modulo.Forces a new plan to be compiled, used, and discarded after the module is executed. Se per il modulo è disponibile un piano di query esistente, tale piano rimane nella cache.If there is an existing query plan for the module, this plan remains in the cache.

Utilizzare questa opzione se il parametro fornito è atipico oppure se i dati sono cambiati notevolmente.Use this option if the parameter you are supplying is atypical or if the data has significantly changed. Questa opzione non viene utilizzata per stored procedure estese.This option is not used for extended stored procedures. È consigliabile utilizzarla solo quando è strettamente necessario, in quanto si tratta di un'opzione onerosa.We recommend that you use this option sparingly because it is expensive.

Nota: non è possibile utilizzare WITH RECOMPILE quando si chiama una stored procedure che utilizza la sintassi OPENDATASOURCE.Note: You can not use WITH RECOMPILE when calling a stored procedure that uses OPENDATASOURCE syntax. Quando viene specificato un nome di oggetto composto da quattro parti, l'opzione WITH RECOMPILE viene ignorata.The WITH RECOMPILE option is ignored when a four-part object name is specified.

Nota: RECOMPILE non è supportato con le funzioni compilate in modo nativo e scalari definite dall'utente.Note: RECOMPILE is not supported with natively compiled, scalar user-defined functions. Se è necessario ricompilare, utilizzare sp_recompile ( Transact-SQL ) .If you need to recompile, use sp_recompile (Transact-SQL).
SET DI RISULTATI NON DEFINITIRESULT SETS UNDEFINED Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.

Questa opzione non fornisce alcuna garanzia sugli eventuali risultati restituiti e non viene specificata alcuna definizione.This option provides no guarantee of what results, if any, will be returned, and no definition is provided. L'istruzione viene eseguita senza errore se vengono restituiti risultati o se non ne vengono restituiti.The statement executes without error if any results are returned or no results are returned. RESULT SETS UNDEFINED rappresenta il comportamento predefinito se result_sets_option non viene specificato.RESULT SETS UNDEFINED is the default behavior if a result_sets_option is not provided.

Per interpretare funzioni scalari definite dall'utente e funzioni definite dall'utente scalare compilate in modo nativo, questa opzione non è operativa perché le funzioni non restituiscono mai un set di risultati.For interpreted scalar user-defined functions, and natively compiled scalar user-defined functions, this option is not operational because the functions never return a result set.
RESULT SETS NONERESULT SETS NONE Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.

Garantisce che l'istruzione di esecuzione non restituirà risultati.Guarantees that the execute statement will not return any results. Se vengono restituiti risultati il batch viene interrotto.If any results are returned the batch is aborted.

Per interpretare funzioni scalari definite dall'utente e funzioni definite dall'utente scalare compilate in modo nativo, questa opzione non è operativa perché le funzioni non restituiscono mai un set di risultati.For interpreted scalar user-defined functions, and natively compiled scalar user-defined functions, this option is not operational because the functions never return a result set.
<result_sets_definition ><result_sets_definition> Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database.

Garantisce che il risultato verrà restituito come specificato in result_sets_definition.Provides a guarantee that the result will come back as specified in the result_sets_definition. Per istruzioni che restituiscono più set di risultati, specificare più result_sets_definition sezioni.For statements that return multiple result sets, provide multiple result_sets_definition sections. Racchiudere ogni result_sets_definition tra parentesi, separate da virgole.Enclose each result_sets_definition in parentheses, separated by commas. Per ulteriori informazioni, vedere <result_sets_definition > più avanti in questo argomento.For more information, see <result_sets_definition> later in this topic.

Sempre questa opzione comporta un errore per le funzioni compilate in modo nativo e scalari definite dall'utente, poiché le funzioni non restituiscono mai un set di risultati.This option always results in an error for natively compiled, scalar user-defined functions because the functions never return a result set.

<result_sets_definition > si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database<result_sets_definition> Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database

Descrive i set di risultati restituiti dalle istruzioni eseguite.Describes the result sets returned by the executed statements. Le clausole di result_sets_definition hanno il significato seguenteThe clauses of the result_sets_definition have the following meaning

NomeTerm DefinizioneDefinition
{{

column_namecolumn_name

data_typedata_type

[ COLLATE collation_name][ COLLATE collation_name]

[NULL | NON È NULL][NULL | NOT NULL]

}}
Vedere la tabella riportata di seguito.See the table below.
db_namedb_name Nome del database contenente la tabella, la vista o la funzione con valori di tabella.The name of the database containing the table, view or table valued function.
schema_nameschema_name Nome dello schema proprietario della tabella, della vista o della funzione con valori di tabella.The name of the schema owning the table, view or table valued function.
table_name | view_name | table_valued_function_nametable_name | view_name | table_valued_function_name Specifica che le colonne restituite saranno quelle specificate nella tabella, nella vista o nella funzione con valori di tabella denominata.Specifies that the columns returned will be those specified in the table, view or table valued function named. La sintassi degli oggetti AS non supporta i sinonimi, le tabelle temporanee e le variabili di tabella.Table variables, temporary tables, and synonyms are not supported in the AS object syntax.
AS TYPE [schema_name.]table_type_nameAS TYPE [schema_name.]table_type_name Specifica che le colonne restituite saranno quelle specificate nel tipo della tabella.Specifies that the columns returned will be those specified in the table type.
AS FOR XMLAS FOR XML Specifica che i risultati XML dell'istruzione o della stored procedure chiamata dall'istruzione EXECUTE vengono convertiti nel formato come se fossero prodotti da un'istruzione SELECT …Specifies that the XML results from the statement or stored procedure called by the EXECUTE statement will be converted into the format as though they were produced by a SELECT … FOR XML …FOR XML … .statement. Tutta la formattazione dalle direttive type nell'istruzione originale viene rimossa e i risultati vengono restituiti come se non fosse stata specificata alcuna direttiva type.All formatting from the type directives in the original statement are removed, and the results returned are as though no type directive was specified. AS FOR XML non converte i risultati tabulari non XML dall'istruzione o dalla stored procedure eseguita in XML.AS FOR XML does not convert non-XML tabular results from the executed statement or stored procedure into XML.
NomeTerm DefinizioneDefinition
column_namecolumn_name Nomi di ogni colonna.The names of each column. Se il numero di colonne è diverso dal set di risultati, si verifica un errore e il batch viene interrotto.If the number of columns differs from the result set, an error occurs and the batch is aborted. Se il nome di una colonna è diverso dal set di risultati, il nome della colonna restituito verrà impostato sul nome definito.If the name of a column differs from the result set, the column name returned will be set to the name defined.
data_typedata_type Tipi di dati di ogni colonna.The data types of each column. Se i tipi di dati sono diversi, viene eseguita una conversione implicita al tipo di dati definito.If the data types differ, an implicit conversion to the defined data type is performed. Se la conversione ha esito negativo il batch viene interrottoIf the conversion fails the batch is aborted
COLLATE collation_nameCOLLATE collation_name Regole di confronto di ogni colonna.The collation of each column. In caso di mancata corrispondenza tra regole di confronto, vengono tentate regole di confronto implicite.If there is a collation mismatch, an implicit collation is attempted. Se la conversione ha esito negativo il batch viene interrotto.If that fails, the batch is aborted.
NULL | NON È NULLNULL | NOT NULL Ammissione di valori Null di ogni colonna.The nullability of each column. Se l'ammissione di valori Null definita è NOT NULL e i dati restituiti contengono NULL si verifica un errore e il batch viene interrotto.If the defined nullability is NOT NULL and the data returned contains NULLs an error occurs and the batch is aborted. Se non è specificato, il valore predefinito si allinea all'impostazione delle opzioni ANSI_NULL_DFLT_ON e ANSI_NULL_DFLT_OFF.If not specified, the default value conforms to the setting of the ANSI_NULL_DFLT_ON and ANSI_NULL_DFLT_OFF options.

Il set di risultati effettivo restituito durante l'esecuzione può essere diverso dal risultato definito tramite la clausola WITH RESULT SETS in uno dei modi seguenti: numero di set di risultati, numero di colonne, nome della colonna, ammissione di valori Null e tipo di dati.The actual result set being returned during execution can differ from the result defined using the WITH RESULT SETS clause in one of the following ways: number of result sets, number of columns, column name, nullability, and data type. Se il numero di set di risultati è diverso, si verifica un errore e il batch viene interrotto.If the number of result sets differs, an error occurs and the batch is aborted.

OsservazioniRemarks

È possibile specificare parametri tramite valore o utilizzandoparameter_name=valore.Parameters can be supplied either by using value or by using @parameter_name=value. Un parametro non fa parte di una transazione. Se un parametro viene modificato in una transazione per la quale verrà eseguito il rollback, il valore del parametro non viene ripristinato al suo valore precedente.A parameter is not part of a transaction; therefore, if a parameter is changed in a transaction that is later rolled back, the value of the parameter does not revert to its previous value. Il valore restituito al chiamante corrisponde sempre al valore specificato al termine del modulo.The value returned to the caller is always the value at the time the module returns.

La nidificazione si verifica quando un modulo ne chiama un altro o quando esegue codice gestito tramite riferimenti a un modulo CLR (Common Language Runtime), un tipo definito dall'utente o una funzione di aggregazione.Nesting occurs when one module calls another or executes managed code by referencing a common language runtime (CLR) module, user-defined type, or aggregate. Il livello di nidificazione viene incrementato quando il modulo chiamato o il riferimento al codice gestito viene eseguito, mentre viene decrementato al termine dell'esecuzione del modulo chiamato o del riferimento al codice gestito.The nesting level is incremented when the called module or managed code reference starts execution, and it is decremented when the called module or managed code reference has finished. Se viene superato il numero massimo di 32 livelli di nidificazione, l'intera catena di chiamata ha esito negativo.Exceeding the maximum of 32 nesting levels causes the complete calling chain to fail. Il livello di nidificazione corrente viene archiviato nel @@NESTLEVEL funzione di sistema.The current nesting level is stored in the @@NESTLEVEL system function.

Poiché le stored procedure remote ed estese non rientrano nell'ambito di una transazione, a meno che non siano eseguite in un'istruzione BEGIN DISTRIBUTED TRANSACTION o utilizzate con diverse opzioni di configurazione, non è possibile eseguire il rollback dei comandi eseguiti tramite chiamate a tali stored procedure.Because remote stored procedures and extended stored procedures are not within the scope of a transaction (unless issued within a BEGIN DISTRIBUTED TRANSACTION statement or when used with various configuration options), commands executed through calls to them cannot be rolled back. Per ulteriori informazioni, vedere Stored procedure di sistema ( Transact-SQL ) e iniziare la transazione distribuita ( Transact-SQL ) .For more information, see System Stored Procedures (Transact-SQL) and BEGIN DISTRIBUTED TRANSACTION (Transact-SQL).

Quando vengono utilizzate variabili cursore, se si esegue una procedura che passa una variabile cursore con un cursore assegnato, viene generato un errore.When you use cursor variables, if you execute a procedure that passes in a cursor variable with a cursor allocated to it an error occurs.

Se l'istruzione è la prima di un batch, non è necessario specificare la parola chiave EXECUTE durante l'esecuzione dei moduli.You do not have to specify the EXECUTE keyword when executing modules if the statement is the first one in a batch.

Per informazioni aggiuntive specifiche delle stored procedure CLR, vedere Stored procedure CLR.For additional information specific to CLR stored procedures, see CLR Stored Procedures.

Utilizzo di EXECUTE con stored procedureUsing EXECUTE with Stored Procedures

Se l'istruzione è la prima di un batch, non è necessario specificare la parola chiave EXECUTE durante l'esecuzione delle stored procedure.You do not have to specify the EXECUTE keyword when you execute stored procedures when the statement is the first one in a batch.

I nomi delle stored procedure di sistema di SQL ServerSQL Server iniziano con i caratteri sp_. SQL ServerSQL Server system stored procedures start with the characters sp_. Sono archiviati fisicamente nel database delle risorse, ma sono visualizzate logicamente nello schema sys di ogni sistema e di un database definito dall'utente.They are physically stored in the Resource database, but logically appear in the sys schema of every system and user-defined database. Se si esegue una stored procedure di sistema in un batch oppure all'interno di un modulo quale una stored procedure o una funzione definita dall'utente, è consigliabile qualificare il nome della stored procedure con il nome dello schema sys.When you execute a system stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with the sys schema name.

I nomi delle stored procedure estese di sistema di SQL ServerSQL Server iniziano con i caratteri xp_ e tali stored procedure sono incluse nello schema dbo del database master. SQL ServerSQL Server system extended stored procedures start with the characters xp_, and these are contained in the dbo schema of the master database. Se si esegue una stored procedure estesa di sistema in un batch oppure all'interno di un modulo quale una stored procedure o una funzione definita dall'utente, è consigliabile qualificare il nome della stored procedure con master.dbo.When you execute a system extended stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with master.dbo.

Se si esegue una stored procedure definita dall'utente in un batch o all'interno di un modulo quale una funzione o una stored procedure definita dall'utente, è consigliabile qualificare il nome della stored procedure con un nome di schema.When you execute a user-defined stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with a schema name. Non è consigliabile assegnare a una stored procedure definita dall'utente lo stesso nome di una stored procedure di sistema.We do not recommend that you name a user-defined stored procedure with the same name as a system stored procedure. Per ulteriori informazioni sull'esecuzione di stored procedure, vedere eseguire una Stored Procedure.For more information about executing stored procedures, see Execute a Stored Procedure.

Utilizzo dell'istruzione EXECUTE con una stringa di caratteriUsing EXECUTE with a Character String

Nelle versioni precedenti di SQL ServerSQL Server le stringhe di caratteri sono limitate a 8.000 byte.In earlier versions of SQL ServerSQL Server, character strings are limited to 8,000 bytes. Ciò richiede la concatenazione di stringhe di grandi dimensioni per l'esecuzione dinamica.This requires concatenating large strings for dynamic execution. In SQL ServerSQL Server, varchar (max) e nvarchar (max) possibile specificare i tipi di dati che consentono di stringhe di caratteri da un massimo di 2 gigabyte di dati.In SQL ServerSQL Server, the varchar(max) and nvarchar(max) data types can be specified that allow for character strings to be up to 2 gigabytes of data.

Le modifiche al contesto del database rimangono effettive solo fino al termine dell'esecuzione di EXECUTE.Changes in database context last only until the end of the EXECUTE statement. Ad esempio, dopo l'esecuzione di EXEC nell'istruzione seguente, il contesto di database è master.For example, after the EXEC in this following statement is run, the database context is master.

USE master; EXEC ('USE AdventureWorks2012; SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee;');  

Cambio di contestoContext Switching

È possibile utilizzare la clausola AS { LOGIN | USER } = ' name ' per cambiare il contesto di esecuzione di un'istruzione dinamica.You can use the AS { LOGIN | USER } = ' name ' clause to switch the execution context of a dynamic statement. Se il cambio di contesto viene specificato come EXECUTE ('string') AS <context_specification>, la durata del cambio di contesto è limitata all'ambito della query in fase di esecuzione.When the context switch is specified as EXECUTE ('string') AS <context_specification>, the duration of the context switch is limited to the scope of the query being executed.

Specifica un utente o un nome di accessoSpecifying a User or Login Name

Il nome utente o nome account di accesso specificato in AS { LOGIN | USER } = ' name ' deve esistere come entità rispettivamente in sys.database_principals o sys.server_principals. In caso contrario, l'istruzione avrà esito negativo.The user or login name specified in AS { LOGIN | USER } = ' name ' must exist as a principal in sys.database_principals or sys.server_principals, respectively, or the statement will fail. È inoltre necessario concedere le autorizzazioni IMPERSONATE per l'entità.Additionally, IMPERSONATE permissions must be granted on the principal. A meno che il chiamante non sia il proprietario del database o membro del ruolo predefinito del server sysadmin, l'entità deve esistere anche quando l'utente effettua l'accesso al database o all'istanza di SQL ServerSQL Server tramite l'appartenenza a un gruppo di Windows.Unless the caller is the database owner or is a member of the sysadmin fixed server role, the principal must exist even when the user is accessing the database or instance of SQL ServerSQL Server through a Windows group membership. Si suppongano ad esempio le condizioni seguenti:For example, assume the following conditions:

  • Il gruppo CompanyDomain\SQLUsers ha accesso al database Sales.CompanyDomain\SQLUsers group has access to the Sales database.

  • CompanyDomain\SqlUser1 è membro del gruppo SQLUsers e pertanto può accedere implicitamente al database Sales.CompanyDomain\SqlUser1 is a member of SQLUsers and, therefore, has implicit access to the Sales database.

    Anche se companydomain\sqluser1 può accedere al database tramite l'appartenenza nel SQLUsers gruppo, l'istruzione EXECUTE @string_variable AS USER = 'CompanyDomain\SqlUser1' avrà esito negativo perché CompanyDomain\SqlUser1 non esiste come entità nel database.Although CompanyDomain\SqlUser1 has access to the database through membership in the SQLUsers group, the statement EXECUTE @string_variable AS USER = 'CompanyDomain\SqlUser1' will fail because CompanyDomain\SqlUser1 does not exist as a principal in the database.

Procedure consigliateBest Practices

Specificare un account di accesso o un utente che disponga almeno dei privilegi necessari per eseguire le operazioni definite nell'istruzione o nel modulo.Specify a login or user that has the least privileges required to perform the operations that are defined in the statement or module. Ad esempio, non specificare un nome account di accesso con autorizzazioni a livello di server se sono richieste solo autorizzazioni a livello di database oppure non specificare l'account di un proprietario di database a meno che siano richieste le autorizzazioni corrispondenti.For example, do not specify a login name, which has server-level permissions, if only database-level permissions are required; or do not specify a database owner account unless those permissions are required.

AutorizzazioniPermissions

Per eseguire l'istruzione EXECUTE, non è necessario disporre di autorizzazioni specifiche.Permissions are not required to run the EXECUTE statement. Sono tuttavia richieste autorizzazioni per le entità a protezione diretta a cui viene fatto riferimento all'interno della stringa EXECUTE.However, permissions are required on the securables that are referenced within the EXECUTE string. Se, ad esempio, la stringa include un'istruzione INSERT, il chiamante dell'istruzione EXECUTE deve disporre dell'autorizzazione INSERT per la tabella di destinazione.For example, if the string contains an INSERT statement, the caller of the EXECUTE statement must have INSERT permission on the target table. Le autorizzazioni vengono verificate non appena viene rilevata l'istruzione EXECUTE, anche se l'istruzione è inclusa in un modulo.Permissions are checked at the time EXECUTE statement is encountered, even if the EXECUTE statement is included within a module.

Le autorizzazioni per l'istruzione EXECUTE per un modulo vengono assegnate per impostazione predefinita al proprietario del modulo, che può quindi trasferirle ad altri utenti.EXECUTE permissions for a module default to the owner of the module, who can transfer them to other users. Quando si esegue un modulo che esegue una stringa, la verifica delle autorizzazioni viene eseguita nel contesto dell'utente che esegue il modulo e non nel contesto dell'utente che l'ha creato.When a module is run that executes a string, permissions are checked in the context of the user who executes the module, not in the context of the user who created the module. Se, tuttavia, lo stesso utente è proprietario del modulo chiamante e del modulo richiamato, la verifica delle autorizzazioni per l'istruzione EXECUTE non viene eseguita per il secondo modulo.However, if the same user owns the calling module and the module being called, EXECUTE permission checking is not performed for the second module.

Se il modulo accede ad altri oggetti di database, l'esecuzione ha esito positivo se per il modulo si dispone dell'autorizzazione EXECUTE e si verifica una delle condizioni seguenti:If the module accesses other database objects, execution succeeds when you have EXECUTE permission on the module and one of the following is true:

  • Il modulo è contrassegnato come EXECUTE AS USER o SELF e il proprietario del modulo dispone delle autorizzazioni corrispondenti per l'oggetto a cui viene fatto riferimento.The module is marked EXECUTE AS USER or SELF, and the module owner has the corresponding permissions on the referenced object. Per ulteriori informazioni sulla rappresentazione all'interno di un modulo, vedere clausola EXECUTE AS ( Transact-SQL ) .For more information about impersonation within a module, see EXECUTE AS Clause (Transact-SQL).

  • Il modulo è contrassegnato come EXECUTE AS CALLER e si dispone delle autorizzazioni corrispondenti per l'oggetto.The module is marked EXECUTE AS CALLER, and you have the corresponding permissions on the object.

  • Il modulo è contrassegnato come EXECUTE AS nome_utente, e nome_utente dispone delle autorizzazioni corrispondenti per l'oggetto.The module is marked EXECUTE AS user_name, and user_name has the corresponding permissions on the object.

Autorizzazioni per il cambio di contestoContext Switching Permissions

Per specificare l'istruzione EXECUTE AS per un account di accesso, il chiamante deve disporre delle autorizzazioni IMPERSONATE per il nome account di accesso specificato.To specify EXECUTE AS on a login, the caller must have IMPERSONATE permissions on the specified login name. Per specificare l'istruzione EXECUTE AS per un utente del database, il chiamante deve disporre delle autorizzazioni IMPERSONATE per il nome utente specificato.To specify EXECUTE AS on a database user, the caller must have IMPERSONATE permissions on the specified user name. Se non si specifica alcun contesto di esecuzione oppure se si specifica EXECUTE AS CALLER, le autorizzazioni IMPERSONATE non sono obbligatorie.When no execution context is specified, or EXECUTE AS CALLER is specified, IMPERSONATE permissions are not required.

EsempiExamples

A.A. Utilizzo dell'istruzione EXECUTE per passare un parametro singoloUsing EXECUTE to pass a single parameter

La stored procedure uspGetEmployeeManagers nel database AdventureWorks2012AdventureWorks2012 prevede un parametro (@EmployeeID).The uspGetEmployeeManagers stored procedure in the AdventureWorks2012AdventureWorks2012 database expects one parameter (@EmployeeID). Negli esempi seguenti vengono eseguite le uspGetEmployeeManagers stored procedure con Employee ID 6 come valore di parametro.The following examples execute the uspGetEmployeeManagers stored procedure with Employee ID 6 as its parameter value.

EXEC dbo.uspGetEmployeeManagers 6;  
GO  

La variabile può essere specificata in modo esplicito durante l'esecuzione.The variable can be explicitly named in the execution:

EXEC dbo.uspGetEmployeeManagers @EmployeeID = 6;  
GO  

Se le operazioni seguenti sono la prima istruzione in un batch o un osql o sqlcmd script EXEC non è obbligatorio.If the following is the first statement in a batch or an osql or sqlcmd script, EXEC is not required.

dbo.uspGetEmployeeManagers 6;  
GO  
--Or  
dbo.uspGetEmployeeManagers @EmployeeID = 6;  
GO  

B.B. Utilizzo di più parametriUsing multiple parameters

Nell'esempio seguente viene eseguita la stored procedure spGetWhereUsedProductID nel database AdventureWorks2012AdventureWorks2012.The following example executes the spGetWhereUsedProductID stored procedure in the AdventureWorks2012AdventureWorks2012 database. Vengono passati due parametri: il primo è un ID prodotto (819), il secondo (@CheckDate,) è un valore di tipo datetime.It passes two parameters: the first parameter is a product ID (819) and the second parameter, @CheckDate, is a datetime value.

DECLARE @CheckDate datetime;  
SET @CheckDate = GETDATE();  
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;  
GO  

C.C. Utilizzo dell'istruzione EXECUTE 'tsql_string' con una variabileUsing EXECUTE 'tsql_string' with a variable

Nell'esempio seguente viene illustrato come l'istruzione EXECUTE gestisca stringhe compilate in modo dinamico contenenti variabili.The following example shows how EXECUTE handles dynamically built strings that contain variables. Nell'esempio viene creato il cursore tables_cursor che include un elenco di tutte le tabelle definite dall'utente nel database AdventureWorks2012AdventureWorks2012, quindi l'elenco viene utilizzato per ricompilare tutti gli indici nella tabella.This example creates the tables_cursor cursor to hold a list of all user-defined tables in the AdventureWorks2012AdventureWorks2012 database, and then uses that list to rebuild all indexes on the tables.

DECLARE tables_cursor CURSOR  
   FOR  
   SELECT s.name, t.name   
   FROM sys.objects AS t  
   JOIN sys.schemas AS s ON s.schema_id = t.schema_id  
   WHERE t.type = 'U';  
OPEN tables_cursor;  
DECLARE @schemaname sysname;  
DECLARE @tablename sysname;  
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;  
WHILE (@@FETCH_STATUS <> -1)  
BEGIN;  
   EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');  
   FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;  
END;  
PRINT 'The indexes on all tables have been rebuilt.';  
CLOSE tables_cursor;  
DEALLOCATE tables_cursor;  
GO  

D.D. Utilizzo dell'istruzione EXECUTE con una stored procedure remotaUsing EXECUTE with a remote stored procedure

Nell'esempio seguente viene eseguita la stored procedure uspGetEmployeeManagers nel server remoto SQLSERVER1 e lo stato restituito, che indica se la stored procedure è stata eseguita correttamente o meno, viene archiviato in @retstat.The following example executes the uspGetEmployeeManagers stored procedure on the remote server SQLSERVER1 and stores the return status that indicates success or failure in @retstat.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

DECLARE @retstat int;  
EXECUTE @retstat = SQLSERVER1.AdventureWorks2012.dbo.uspGetEmployeeManagers @BusinessEntityID = 6;  

E.E. Utilizzo dell'istruzione EXECUTE con una variabile di stored procedureUsing EXECUTE with a stored procedure variable

Nell'esempio seguente viene creata una variabile che rappresenta il nome di una stored procedure.The following example creates a variable that represents a stored procedure name.

DECLARE @proc_name varchar(30);  
SET @proc_name = 'sys.sp_who';  
EXEC @proc_name;  

F.F. Utilizzo dell'istruzione EXECUTE con la parola chiave DEFAULTUsing EXECUTE with DEFAULT

Nell'esempio seguente viene creata una stored procedure con valori predefiniti per il primo e il terzo parametro.The following example creates a stored procedure with default values for the first and third parameters. Quando si esegue la procedura, se nella chiamata non viene passato alcun valore oppure viene specificato il valore predefinito, i valori predefiniti vengono utilizzati per il primo e il terzo parametro.When the procedure is run, these defaults are inserted for the first and third parameters when no value is passed in the call or when the default is specified. Si notino i vari utilizzi della parola chiave DEFAULT.Note the various ways the DEFAULT keyword can be used.

IF OBJECT_ID(N'dbo.ProcTestDefaults', N'P')IS NOT NULL  
   DROP PROCEDURE dbo.ProcTestDefaults;  
GO  
-- Create the stored procedure.  
CREATE PROCEDURE dbo.ProcTestDefaults (  
@p1 smallint = 42,   
@p2 char(1),   
@p3 varchar(8) = 'CAR')  
AS   
   SET NOCOUNT ON;  
   SELECT @p1, @p2, @p3  
;  
GO  

La stored procedure Proc_Test_Defaults può essere eseguita in molte combinazioni.The Proc_Test_Defaults stored procedure can be executed in many combinations.

-- Specifying a value only for one parameter (@p2).  
EXECUTE dbo.ProcTestDefaults @p2 = 'A';  
-- Specifying a value for the first two parameters.  
EXECUTE dbo.ProcTestDefaults 68, 'B';  
-- Specifying a value for all three parameters.  
EXECUTE dbo.ProcTestDefaults 68, 'C', 'House';  
-- Using the DEFAULT keyword for the first parameter.  
EXECUTE dbo.ProcTestDefaults @p1 = DEFAULT, @p2 = 'D';  
-- Specifying the parameters in an order different from the order defined in the procedure.  
EXECUTE dbo.ProcTestDefaults DEFAULT, @p3 = 'Local', @p2 = 'E';  
-- Using the DEFAULT keyword for the first and third parameters.  
EXECUTE dbo.ProcTestDefaults DEFAULT, 'H', DEFAULT;  
EXECUTE dbo.ProcTestDefaults DEFAULT, 'I', @p3 = DEFAULT;  

G.G. Utilizzo dell'istruzione EXECUTE con il parametro AT linked_server_nameUsing EXECUTE with AT linked_server_name

Nell'esempio seguente una stringa di comando viene passata a un server remoto.The following example passes a command string to a remote server. Verrà creato un server collegato SeattleSales che punta a un'altra istanza di SQL ServerSQL Server ed esegue un'istruzione DDL (CREATE TABLE) in tale server collegato.It creates a linked server SeattleSales that points to another instance of SQL ServerSQL Server and executes a DDL statement (CREATE TABLE) against that linked server.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

EXEC sp_addlinkedserver 'SeattleSales', 'SQL Server'  
GO  
EXECUTE ( 'CREATE TABLE AdventureWorks2012.dbo.SalesTbl   
(SalesID int, SalesName varchar(10)) ; ' ) AT SeattleSales;  
GO  

H.H. Utilizzo dell'istruzione EXECUTE WITH RECOMPILEUsing EXECUTE WITH RECOMPILE

Nell'esempio seguente viene eseguita la Proc_Test_Defaults stored procedure e forza un nuovo piano di query da compilare, utilizzo e l'eliminazione dopo l'esecuzione del modulo.The following example executes the Proc_Test_Defaults stored procedure and forces a new query plan to be compiled, used, and discarded after the module is executed.

EXECUTE dbo.Proc_Test_Defaults @p2 = 'A' WITH RECOMPILE;  
GO  

I.I. Utilizzo dell'istruzione EXECUTE con una funzione definita dall'utenteUsing EXECUTE with a user-defined function

Nell'esempio seguente viene eseguita la funzione scalare definita dall'utente ufnGetSalesOrderStatusText nel database AdventureWorks2012AdventureWorks2012.The following example executes the ufnGetSalesOrderStatusText scalar user-defined function in the AdventureWorks2012AdventureWorks2012 database. Viene utilizzata la variabile @returnstatus per archiviare il valore restituito dalla funzione.It uses the variable @returnstatus to store the value returned by the function. Per la funzione è previsto un parametro di input (@Status)The function expects one input parameter, @Status. Ciò viene definito come un tinyint tipo di dati.This is defined as a tinyint data type.

DECLARE @returnstatus nvarchar(15);  
SET @returnstatus = NULL;  
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;  
PRINT @returnstatus;  
GO  

J.J. Utilizzo dell'istruzione EXECUTE per eseguire query su un database Oracle in un server collegatoUsing EXECUTE to query an Oracle database on a linked server

Nell'esempio seguente vengono eseguite più istruzioni SELECT nel server Oracle remoto.The following example executes several SELECT statements at the remote Oracle server. Viene innanzitutto aggiunto il server Oracle come server collegato e quindi viene creato l'account di accesso per il server collegato.The example begins by adding the Oracle server as a linked server and creating linked server login.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

-- Setup the linked server.  
EXEC sp_addlinkedserver    
        @server='ORACLE',  
        @srvproduct='Oracle',  
        @provider='OraOLEDB.Oracle',   
        @datasrc='ORACLE10';  

EXEC sp_addlinkedsrvlogin   
    @rmtsrvname='ORACLE',  
    @useself='false',   
    @locallogin=null,   
    @rmtuser='scott',   
    @rmtpassword='tiger';  

EXEC sp_serveroption 'ORACLE', 'rpc out', true;  
GO  

-- Execute several statements on the linked Oracle server.  
EXEC ( 'SELECT * FROM scott.emp') AT ORACLE;  
GO  
EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', 7902) AT ORACLE;  
GO  
DECLARE @v INT;   
SET @v = 7902;  
EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', @v) AT ORACLE;  
GO   

K.K. Utilizzo dell'istruzione EXECUTE AS USER per cambiare contesto a un altro utenteUsing EXECUTE AS USER to switch context to another user

Nell'esempio seguente viene eseguita una stringa Transact-SQLTransact-SQL che crea una tabella e viene quindi specificata la clausola AS USER per cambiare il contesto di esecuzione dell'istruzione dal chiamante a User1.The following example executes a Transact-SQLTransact-SQL string that creates a table and specifies the AS USER clause to switch the execution context of the statement from the caller to User1. Il Motore di databaseDatabase Engine controllerà le autorizzazioni di User1 quando viene eseguita l'istruzione.The Motore di databaseDatabase Engine will check the permissions of User1 when the statement is run. User1 deve esistere come utente nel database e deve disporre delle autorizzazioni necessarie per creare tabelle nello schema Sales. In caso contrario, l'istruzione avrà esito negativo.User1 must exist as a user in the database and must have permission to create tables in the Sales schema, or the statement fails.

EXECUTE ('CREATE TABLE Sales.SalesTable (SalesID int, SalesName varchar(10));')  
AS USER = 'User1';  
GO  

L.L. Utilizzo di un parametro con EXECUTE e AT linked_server_nameUsing a parameter with EXECUTE and AT linked_server_name

Nell'esempio seguente una stringa di comando viene passata a un server remoto utilizzando un punto interrogativo (?) come segnaposto per un parametro.The following example passes a command string to a remote server by using a question mark (?) placeholder for a parameter. Viene quindi creato un server collegato SeattleSales che punta a un'altra istanza di SQL ServerSQL Server e viene eseguita un'istruzione SELECT applicata a tale server collegato.The example creates a linked server SeattleSales that points to another instance of SQL ServerSQL Server and executes a SELECT statement against that linked server. L'istruzione SELECT utilizza il punto interrogativo come segnaposto per il parametro ProductID (952), specificato dopo l'istruzione.The SELECT statement uses the question mark as a place holder for the ProductID parameter (952), which is provided after the statement.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017

-- Setup the linked server.  
EXEC sp_addlinkedserver 'SeattleSales', 'SQL Server'  
GO  
-- Execute the SELECT statement.  
EXECUTE ('SELECT ProductID, Name   
    FROM AdventureWorks2012.Production.Product  
    WHERE ProductID = ? ', 952) AT SeattleSales;  
GO  

M.M. Utilizzo di EXECUTE per ridefinire un singolo set di risultatiUsing EXECUTE to redefine a single result set

In alcuni degli esempi precedenti è stato eseguito EXEC dbo.uspGetEmployeeManagers 6; che ha restituito 7 colonne.Some of the previous examples executed EXEC dbo.uspGetEmployeeManagers 6; which returned 7 columns. Nell'esempio seguente viene illustrato l'utilizzo della sintassi WITH RESULT SET per modificare i nomi e i tipi di dati del set di risultati ottenuto.The following example demonstrates using the WITH RESULT SET syntax to change the names and data types of the returning result set.

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL DatabaseApplies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database

EXEC uspGetEmployeeManagers 16  
WITH RESULT SETS  
(   
   ([Reporting Level] int NOT NULL,  
    [ID of Employee] int NOT NULL,  
    [Employee First Name] nvarchar(50) NOT NULL,  
    [Employee Last Name] nvarchar(50) NOT NULL,  
    [Employee ID of Manager] nvarchar(max) NOT NULL,  
    [Manager First Name] nvarchar(50) NOT NULL,  
    [Manager Last Name] nvarchar(50) NOT NULL )  
);  

N.N. Utilizzo di EXECUTE per ridefinire due set di risultatiUsing EXECUTE to redefine a two result sets

Quando si esegue un'istruzione che restituisce più di un set di risultati, definire ogni set di risultati previsto.When executing a statement that returns more than one result set, define each expected result set. Nell'esempio seguente in AdventureWorks2012AdventureWorks2012 viene creata una stored procedure che restituisce due set di risultati.The following example in AdventureWorks2012AdventureWorks2012 creates a procedure that returns two result sets. Quindi la procedura viene eseguita utilizzando il WITH RESULT SETS clausola e specificando i risultati di due definizioni di set.Then the procedure is executed using the WITH RESULT SETS clause, and specifying two result set definitions.

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL DatabaseApplies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017, Database SQL di AzureAzure SQL Database

--Create the procedure  
CREATE PROC Production.ProductList @ProdName nvarchar(50)  
AS  
-- First result set  
SELECT ProductID, Name, ListPrice  
    FROM Production.Product  
    WHERE Name LIKE @ProdName;  
-- Second result set   
SELECT Name, COUNT(S.ProductID) AS NumberOfOrders  
    FROM Production.Product AS P  
    JOIN Sales.SalesOrderDetail AS S  
        ON P.ProductID  = S.ProductID   
    WHERE Name LIKE @ProdName  
    GROUP BY Name;  
GO  

-- Execute the procedure   
EXEC Production.ProductList '%tire%'  
WITH RESULT SETS   
(  
    (ProductID int,   -- first result set definition starts here  
    Name Name,  
    ListPrice money)  
    ,                 -- comma separates result set definitions  
    (Name Name,       -- second result set definition starts here  
    NumberOfOrders int)  
);  

Esempi: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Esempio /o: esecuzione di Procedure di baseExample O: Basic Procedure Execution

Esegue una stored procedure:Executing a stored procedure:

EXEC proc1;  

Chiamata di una stored procedure con nome determinato in fase di esecuzione:Calling a stored procedure with name determined at runtime:

EXEC ('EXEC ' + @var);  

Chiamare una stored procedure da all'interno di una stored procedure:Calling a stored procedure from within a stored procedure:

CREATE sp_first AS EXEC sp_second; EXEC sp_third;  

Esempio p: l'esecuzione di stringheExample P: Executing Strings

Esecuzione di una stringa SQL:Executing a SQL string:

EXEC ('SELECT * FROM sys.types');  

Esecuzione di una stringa annidata:Executing a nested string:

EXEC ('EXEC (''SELECT * FROM sys.types'')');  

L'esecuzione di una variabile di stringa:Executing a string variable:

DECLARE @stringVar nvarchar(100);  
SET @stringVar = N'SELECT name FROM' + ' sys.sql_logins';  
EXEC (@stringVar);  

Esempio d: le procedure con parametriExample Q: Procedures with Parameters

Nell'esempio seguente crea una stored procedure con parametri e vengono illustrate le 3 modalità per eseguire la stored procedure:The following example creates a procedure with parameters and demonstrates 3 ways to execute the procedure:

-- Uses AdventureWorks  

CREATE PROC ProcWithParameters  
    @name nvarchar(50),  
@color nvarchar (15)  
AS   
SELECT ProductKey, EnglishProductName, Color FROM [dbo].[DimProduct]  
WHERE EnglishProductName LIKE @name  
AND Color = @color;  
GO  

-- Executing using positional parameters  
EXEC ProcWithParameters N'%arm%', N'Black';  
-- Executing using named parameters in order  
EXEC ProcWithParameters @name = N'%arm%', @color = N'Black';  
-- Executing using named parameters out of order  
EXEC ProcWithParameters @color = N'Black', @name = N'%arm%';  
GO  

Vedere ancheSee Also

@@NESTLEVEL (Transact-SQL) @@NESTLEVEL (Transact-SQL)
DECLARE @local_variable (Transact-SQL) DECLARE @local_variable (Transact-SQL)
Clausola EXECUTE AS (Transact-SQL) EXECUTE AS Clause (Transact-SQL)
Utilità osql osql Utility
Entità (motore di database) Principals (Database Engine)
Ripristina ( Transact-SQL ) REVERT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
Utilità sqlcmd sqlcmd Utility
SUSER_NAME ( Transact-SQL ) SUSER_NAME (Transact-SQL)
sys.database_principals (Transact-SQL) sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL) sys.server_principals (Transact-SQL)
USER_NAME ( Transact-SQL ) USER_NAME (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
Funzioni scalari definite dall'utente per OLTP in memoriaScalar User-Defined Functions for In-Memory OLTP