Attività Esegui SQLExecute SQL Task

L'attività Esegui SQL consente di eseguire istruzioni SQL o stored procedure da un pacchetto.The Execute SQL task runs SQL statements or stored procedures from a package. L'attività può includere una o più istruzioni SQL che vengono eseguite in ordine sequenziale.The task can contain either a single SQL statement or multiple SQL statements that run sequentially. È possibile utilizzare l'attività Esegui SQL per gli scopi seguenti:You can use the Execute SQL task for the following purposes:

  • Troncare una tabella o una vista per prepararla per l'inserimento di dati.Truncate a table or view in preparation for inserting data.

  • Creare, modificare ed eliminare oggetti di database come tabelle e viste.Create, alter, and drop database objects such as tables and views.

  • Ricreare tabelle dei fatti e delle dimensioni prima di caricarvi i dati.Re-create fact and dimension tables before loading data into them.

  • Eseguire stored procedure.Run stored procedures. Se l'istruzione SQL richiama una stored procedure che restituisce risultati da una tabella temporanea, utilizzare l'opzione WITH RESULT SETS per definire metadati per il set di risultati.If the SQL statement invokes a stored procedure that returns results from a temporary table, use the WITH RESULT SETS option to define metadata for the result set.

  • Salvare in una variabile il set di righe restituito da una query.Save the rowset returned from a query into a variable.

    L'attività Esegui SQL può essere usata in combinazione con i contenitori Ciclo Foreach e Ciclo For per eseguire più istruzioni SQL.The Execute SQL task can be used in combination with the Foreach Loop and For Loop containers to run multiple SQL statements. Questi contenitori consentono di implementare flussi di controllo ripetuti in un pacchetto e possono eseguire più volte l'attività Esegui SQL.These containers implement repeating control flows in a package and they can run the Execute SQL task repeatedly. Utilizzando ad esempio il contenitore Ciclo Foreach, il pacchetto può enumerare i file in una cartella ed eseguire ripetutamente un'attività Esegui SQL per elaborare l'istruzione SQL archiviata in ogni file.For example, using the Foreach Loop container, a package can enumerate files in a folder and run an Execute SQL task repeatedly to execute the SQL statement stored in each file.

Connettersi a un'origine datiConnect to a data source

Per connettersi all'origine dei dati su cui eseguire l'istruzione SQL o la stored procedure, l'attività Esegui SQL può utilizzare diversi tipi di gestione connessione,The Execute SQL task can use different types of connection managers to connect to the data source where it runs the SQL statement or stored procedure. elencati nella tabella seguente.The task can use the connection types listed in the following table.

Tipo di connessioneConnection type Gestione connessioneConnection manager
EXCELEXCEL Gestione connessione ExcelExcel Connection Manager
OLE DBOLE DB Gestione connessione OLE DBOLE DB Connection Manager
ODBCODBC Gestione connessione ODBCODBC Connection Manager
ADOADO Gestione connessione ADOADO Connection Manager
ADO.NETADO.NET Gestione connessione ADO.NETADO.NET Connection Manager
SQLMOBILESQLMOBILE Gestione di connessione di SQL Server Compact EditionSQL Server Compact Edition Connection Manager

Creare istruzioni SQLCreate SQL statements

L'origine delle istruzioni SQL utilizzate da questa attività può essere una proprietà dell'attività che contiene un'istruzione, una connessione a un file che contiene una o più istruzioni oppure il nome di una variabile che contiene un'istruzione.The source of the SQL statements used by this task can be a task property that contains a statement, a connection to a file that contains one or multiple statements, or the name of a variable that contains a statement. Le istruzioni SQL devono essere scritte nel sottolinguaggio del sistema di gestione di database (DBMS) di origine.The SQL statements must be written in the dialect of the source database management system (DBMS). Per altre informazioni, vedere Query di Integration Services (SSIS).For more information, see Integration Services (SSIS) Queries.

Se le istruzioni SQL sono memorizzate in un file, per connettersi al file l'attività utilizzerà una gestione connessione file.If the SQL statements are stored in a file, the task uses a File connection manager to connect to the file. Per altre informazioni, vedere File Connection Manager.For more information, see File Connection Manager.

In Progettazione SSISSSIS per creare query SQL è possibile digitare le istruzioni nella finestra di dialogo Editor attività Esegui SQL o utilizzare l'interfaccia utente grafica Generatore di query.In SSISSSIS Designer, you can use the Execute SQL Task Editor dialog box to type SQL statements, or use Query Builder, a graphical user interface for creating SQL queries.

Nota

L'attività Esegui SQL non è in grado di elaborare correttamente le istruzioni SQL valide scritte al di fuori dell'attività stessa.Valid SQL statements written outside the Execute SQL task may not be parsed successfully by the Execute SQL task.

Nota

L'attività Esegui SQL usa il valore di enumerazione ParseMode RecognizedAll .The Execute SQL Task uses the RecognizeAll ParseMode enumeration value. Per altre informazioni, vedere Spazio dei nomi ManagedBatchParser.For more information, see ManagedBatchParser Namespace.

Inviare più istruzioni in un batchSend multiple statements in a batch

Se un'attività Esegui SQL include più istruzioni, sarà possibile raggrupparle ed eseguirle come batch,If you include multiple statements in an Execute SQL task, you can group them and run them as a batch. utilizzando il comando GO per segnalare la fine del batch.To signal the end of a batch, use the GO command. Tutte le istruzioni SQL comprese tra due comandi GO vengono inviate in batch al provider OLE DB per l'esecuzione.All the SQL statements between two GO commands are sent in a batch to the OLE DB provider to be run. Il comando SQL può includere più batch separati da comandi GO.The SQL command can include multiple batches separated by GO commands.

I tipi di istruzioni SQL che è possibile raggruppare in un batch sono soggetti a restrizioni.There are restrictions on the kinds of SQL statements that you can group in a batch. Per altre informazioni, vedere Batch di istruzioni.For more information, see Batches of Statements.

Se l'attività Esegui SQL esegue un batch di istruzioni SQL, al batch verranno applicate le regole seguenti:If the Execute SQL task runs a batch of SQL statements, the following rules apply to the batch:

  • Può restituire un set di risultati una sola istruzione, che deve essere la prima del batch.Only one statement can return a result set and it must be the first statement in the batch.

  • Se il set di risultati utilizza associazioni di risultati, le query dovranno restituire lo stesso numero di colonne.If the result set uses result bindings, the queries must return the same number of columns. Se le query restituiscono numeri di colonne diversi, l'attività avrà esito negativo.If the queries return a different number of columns, the task fails. Le query eseguite dall'attività, ad esempio DELETE o INSERT, possono tuttavia avere esito positivo anche se l'attività non viene eseguita correttamente.However, even if the task fails, the queries that it runs, such as DELETE or INSERT queries, may succeed.

  • Se le associazioni di risultati utilizzano nomi di colonne, la query dovrà restituire colonne con nomi uguali a quelli del set di risultati dell'attività.If the result bindings use column names, the query must return columns that have the same names as the result set names that are used in the task. Se le colonne non sono presenti, l'attività avrà esito negativo.If the columns are missing, the task fails.

  • Se l'attività utilizza un'associazione di parametri, tutte le query incluse nel batch dovranno avere lo stesso numero e gli stessi tipi di parametri.If the task uses parameter binding, all the queries in the batch must have the same number and types of parameters.

Eseguire i comandi SQL con parametriRun parameterized SQL commands

Le istruzioni SQL e le stored procedure utilizzano spesso parametri di input, parametri di output e codici restituiti.SQL statements and stored procedures frequently use input parameters, output parameters, and return codes. L'attività Esegui SQL supporta parametri di tipo Input, Outpute ReturnValue .The Execute SQL task supports the Input, Output, and ReturnValue parameter types. Il tipo Input viene usato per i parametri di input, il tipo Output per i parametri di output e il tipo ReturnValue per i codici restituiti.You use the Input type for input parameters, Output for output parameters, and ReturnValue for return codes.

Nota

È possibile utilizzare parametri in un'attività Esegui SQL solo se il provider di dati li supporta.You can use parameters in an Execute SQL task only if the data provider supports them.

Specificare che un set di risultati tipoSpecify a result set type

A seconda del tipo di comando SQL, all'attività Esegui SQL può essere restituito o meno un set di risultati.Depending on the type of SQL command, a result set may or may not be returned to the Execute SQL task. Se si utilizzano ad esempio le istruzioni SELECT, viene in genere restituito un set di risultati, mentre questo non avviene per le istruzioni INSERT.For example, a SELECT statement typically returns a result set, but an INSERT statement does not. Il set di risultati restituito da un'istruzione SELECT può contenere zero, una o più righe.The result set from a SELECT statement can contain zero rows, one row, or many rows. Le stored procedure possono restituire anche un valore intero, detto codice restituito, che indica lo stato dell'esecuzione della procedura.Stored procedures can also return an integer value, called a return code, that indicates the execution status of the procedure. In questo caso il set di risultati è costituito da una sola riga.In that case, the result set consists of a single row.

Configurare l'attività Esegui SQLConfigure the Execute SQL task

Per configurare l'attività Esegui SQL, procedere nel modo seguente:You can configure the Execute SQL task in the following ways:

  • Specificare il tipo di gestione connessione da utilizzare per la connessione a un database.Specify the type of connection manager to use to connect to a database.

  • Specificare il tipo di set di risultati restituito dall'istruzione SQL.Specify the type of result set that the SQL statement returns.

  • Specificare un timeout per l'istruzione SQL.Specify a time-out for the SQL statements.

  • Specificare l'origine dell'istruzione SQL.Specify the source of the SQL statement.

  • Indicare se l'attività salta la fase di preparazione per l'istruzione SQL.Indicate whether the task skips the prepare phase for the SQL statement.

  • Se si utilizza il tipo di connessione ADO, è necessario indicare se l'istruzione SQL è una stored procedure.If you use the ADO connection type, you must indicate whether the SQL statement is a stored procedure. Per altri tipi di connessione questa proprietà è di sola lettura e ha sempre valore false.For other connection types, this property is read-only and its value is always false.

    È possibile impostare le proprietà a livello di programmazione o tramite Progettazione SSISSSIS .You can set properties programmatically or through SSISSSIS Designer.

Pagina generale - Editor attività Esegui SQLGeneral Page - Execute SQL Task Editor

Usare la pagina Generale della finestra di dialogo Editor attività Esegui SQL per configurare l'attività Esegui SQL e specificare l'istruzione SQL eseguita dall'attività.Use the General page of the Execute SQL Task Editor dialog box to configure the Execute SQL task and provide the SQL statement that the task runs.

Per sapere di più sul linguaggio di query Transact-SQL, vedere Guida di riferimento a Transact-SQL (Motore di database).To learn more about the Transact-SQL query language, see Transact-SQL Reference (Database Engine).

Opzioni staticheStatic Options

NomeName
Consente di specificare un nome univoco per l'attività Esegui SQL nel flusso di lavoro.Provide a unique name for the Execute SQL task in the workflow. Il nome specificato verrà visualizzato in Progettazione SSISSSIS .The name that is provided will be displayed within SSISSSIS Designer.

DescrizioneDescription
Consente di immettere una descrizione per l'attività Esegui SQL.Describe the Execute SQL task. È consigliabile includere nella descrizione informazioni sugli scopi dell'attività, in modo da ottenere pacchetti autodocumentati e semplificarne quindi la gestione.As a best practice, to make packages self-documenting and easier to maintain, describe the task in terms of its purpose.

TimeOutTimeOut
Consente di specificare il numero massimo di secondi per cui l'attività verrà eseguita prima del timeout.Specify the maximum number of seconds the task will run before timing out. Il valore 0 corrisponde a un intervallo infinito.A value of 0 indicates an infinite time. Il valore predefinito è 0.The default is 0.

Nota

Il timeout delle stored procedure non si verifica se queste emulano la funzionalità di sospensione specificando un periodo di tempo per la creazione di connessioni e il completamento di transazioni maggiore rispetto al numero di secondi indicato da TimeOut.Stored procedures do not time out if they emulate sleep functionality by providing time for connections to be made and transactions to complete that is greater than the number of seconds specified by TimeOut. Le stored procedure che eseguono query sono comunque soggette alle restrizioni di tempo specificate da TimeOut.However, stored procedures that execute queries are always subject to the time restriction specified by TimeOut.

CodePageCodePage
Consente di specificare la tabella codici da utilizzare durante la conversione di valori Unicode in variabili.Specify the code page to use when translating Unicode values in variables. Il valore predefinito corrisponde alla tabella codici del computer locale.The default value is the code page of the local computer.

Nota

Quando l'attività Esegui SQL usa una gestione connessione ADO o ODBC, la proprietà CodePage non è disponibile.When the Execute SQL task uses an ADO or ODBC connection manager, the CodePage property is not available. Se la soluzione richiede l'utilizzo di una tabella codici, utilizzare una gestione connessione OLE DB o ADO.NET con l'attività Esegui SQL.If your solution requires the use of a code page, use an OLE DB or an ADO.NET connection manager with the Execute SQL task.

TypeConversionModeTypeConversionMode
Se si imposta questa proprietà su Allowed, l'attività Esegui SQL tenterà di convertire il parametro di output e i risultati della query nel tipo di dati della variabile a cui sono assegnati i risultati.When you set this property to Allowed, the Execute SQL Task will attempt to convert output parameter and query results to the data type of the variable the results are assigned to. Si applica al tipo di set di risultati Riga singola .This applies to the Single row result set type.

Set di risultatiResultSet
Consente di specificare il tipo di risultati previsto per un'istruzione SQL in fase di esecuzione.Specify the result type expected by the SQL statement being run. È possibile scegliere tra Riga singola, Set dei risultati completo, XMLo Nessuno.Choose among Single row, Full result set, XML, or None.

ConnectionTypeConnectionType
Consente di scegliere il tipo di gestione connessione da utilizzare per la connessione a un'origine dati.Choose the type of connection manager to use to connect to the data source. I tipi di connessione disponibili includono OLE DB, ODBC, ADO, ADO.NET e SQLMOBILE.Available connection types include OLE DB, ODBC, ADO, ADO.NET and SQLMOBILE.

Argomenti correlati: Gestione connessione OLE DB, Gestione connessione ODBC, Gestione connessione ADO, Gestione connessione ADO.NET, Gestione connessione SQL Server Compact EditionRelated Topics: OLE DB Connection Manager, ODBC Connection Manager, ADO Connection Manager, ADO.NET Connection Manager, SQL Server Compact Edition Connection Manager

ConnessioneConnection
Consente di scegliere una connessione da un elenco di gestioni connessione definite.Choose the connection from a list of defined connection managers. Per creare una nuova connessione, selezionare < nuova connessione... >.To create a new connection, select <New connection...>.

SQLSourceTypeSQLSourceType
Consente di selezionare il tipo di origine dell'istruzione SQL eseguita dall'attività.Select the source type of the SQL statement that the task runs.

A seconda del tipo di gestione connessione utilizzato dall'attività Esegui SQL, è necessario utilizzare indicatori di parametro specifici nelle istruzioni SQL con parametri.Depending on the connection manager type that Execute SQL task uses, you must use specific parameter markers in parameterized SQL statements.

Per questa proprietà sono disponibili le opzioni elencate nella tabella seguente.This property has the options listed in the following table.

ValoreValue DescriptionDescription
Input direttoDirect input Consente di impostare l'origine su un'istruzione Transact-SQL.Set the source to a Transact-SQL statement. Selezionando questo valore, verrà visualizzata l'opzione dinamica SQLStatement.Selecting this value displays the dynamic option, SQLStatement.
Connessione fileFile connection Consente di selezionare un file contenente un'istruzione Transact-SQL.Select a file that contains a Transact-SQL statement. Impostando questa opzione, verrà visualizzata l'opzione dinamica FileConnection.Setting this option displays the dynamic option, FileConnection.
VariabileVariable Consente di impostare l'origine su una variabile che definisce l'istruzione Transact-SQL.Set the source to a variable that defines the Transact-SQL statement. Se si seleziona questo valore, viene visualizzata l'opzione dinamica SourceVariable.Selecting this value displays the dynamic option, SourceVariable.

QueryIsStoredProcedureQueryIsStoredProcedure
Indica se l'istruzione SQL specificata da eseguire è una stored procedure.Indicates whether the specified SQL statement to be run is a stored procedure. Questa proprietà è di lettura/scrittura solo se l'attività utilizza una gestione connessione ADO.This property is read/write only if the task uses the ADO connection manager. Altrimenti, la proprietà è di sola lettura e il relativo valore è false.Otherwise the property is read-only and its value is false.

BypassPrepareBypassPrepare
Indica se l'istruzione SQL è stata preparata.Indicate whether the SQL statement is prepared. Il valoretrue ignora la preparazione, il valore false prepara l'istruzione SQL prima dell'esecuzione.true skips preparation; false prepares the SQL statement before running it. Questa opzione è disponibile solo con le connessioni OLE DB che supportano la preparazione.This option is available only with OLE DB connections that support preparation.

Argomenti correlati: Esecuzione preparataRelated Topics: Prepared Execution

SfogliaBrowse
Individuare un file contenente un'istruzione SQL tramite la finestra di dialogo Apri .Locate a file that contains a SQL statement by using the Open dialog box. Selezionare un file per copiarne il contenuto sotto forma di istruzione SQL nella proprietà SQLStatement .Select a file to copy the contents of the file as a SQL statement into the SQLStatement property.

Compila queryBuild Query
Consente di creare un'istruzione SQL tramite la finestra di dialogo Generatore query , uno strumento grafico usato per la creazione di query.Create an SQL statement using the Query Builder dialog box, a graphical tool used to create queries. Questa opzione è disponibile quando l'opzione SQLSourceType è impostata su Input diretto.This option is available when the SQLSourceType option is set to Direct input.

Analizza queryParse Query
Consente di convalidare la sintassi dell'istruzione SQL.Validate the syntax of the SQL statement.

Opzioni dinamiche SQLSourceTypeSQLSourceType Dynamic Options

SQLSourceType = Input direttoSQLSourceType = Direct input

SQLStatementSQLStatement
Digitare l'istruzione SQL da eseguire nella casella di opzione oppure fare clic sul pulsante (…) per digitare l'istruzione SQL nella finestra di dialogo Immetti query SQL o fare clic su Compila query per comporre l'istruzione tramite la finestra di dialogo Generatore di query .Type the SQL statement to execute in the option box, or click the browse button (…) to type the SQL statement in the Enter SQL Query dialog box, or click Build Query to compose the statement using the Query Builder dialog box.

Argomenti correlati: Generatore queryRelated Topics: Query Builder

SQLSourceType = Connessione fileSQLSourceType = File connection

FileConnectionFileConnection
Selezionare una gestione connessione File esistente oppure fare clic su < nuova connessione... > per creare una nuova gestione connessione.Select an existing File connection manager, or click <New connection...> to create a new connection manager.

Argomenti correlati: File Connection Manager, File Connection Manager EditorRelated Topics: File Connection Manager, File Connection Manager Editor

SQLSourceType = VariabileSQLSourceType = Variable

SourceVariableSourceVariable
Selezionare una variabile esistente oppure fare clic su < nuova variabile... > per creare una nuova variabile.Select an existing variable, or click <New variable...> to create a new variable.

Argomenti correlati: Variabili di Integration Services (SSIS), Aggiungi variabileRelated Topics: Integration Services (SSIS) Variables, Add Variable

Pagina Mapping parametri - Editor attività Esegui SQLParameter Mapping Page - Execute SQL Task Editor

Usare la pagina Mapping parametri della finestra di dialogo Editor attività Esegui SQL per eseguire il mapping tra variabili e parametri nell'istruzione SQL.Use the Parameter Mapping page of the Execute SQL Task Editor dialog box to map variables to parameters in the SQL statement.

OpzioniOptions

Nome variabileVariable Name
Dopo aver aggiunto un mapping dei parametri facendo Aggiungi, selezionare un sistema o una variabile definita dall'utente dall'elenco oppure fare clic su < nuova variabile... > per aggiungere una nuova variabile tramite la Aggiungi variabile la finestra di dialogo.After you have added a parameter mapping by clicking Add, select a system or user-defined variable from the list or click <New variable...> to add a new variable by using the Add Variable dialog box.

Argomenti correlati: Variabili di Integration Services (SSIS)Related Topics: Integration Services (SSIS) Variables

DirezioneDirection
Consente di selezionare la direzione del parametro.Select the direction of the parameter. Eseguire il mapping di ogni variabile a un parametro di input, a un parametro di output o a un codice restituito.Map each variable to an input parameter, output parameter, or a return code.

Tipo di datiData Type
Selezionare il tipo di dati del parametro.Select the data type of the parameter. L'elenco dei tipi di dati disponibili è specifico del provider selezionato per la gestione connessione utilizzata dall'attività.The list of available data types is specific to the provider selected in the connection manager used by the task.

Nome parametroParameter Name
Consente di specificare un nome per il parametro.Provide a parameter name.

A seconda del tipo di gestione connessione utilizzata dall'attività, è necessario specificare numeri o nomi di parametri.Depending on the connection manager type that the task uses, you must use numbers or parameter names. Alcuni tipi di Gestore connessione è necessario che il primo carattere del nome del parametro sia il simbolo @, nomi specifici come @Param1, o nomi di colonna come nomi di parametro.Some connection manager types require that the first character of the parameter name is the @ sign , specific names like @Param1, or column names as parameter names.

Il parametro di dimensioneParameter Size
Fornisce le dimensioni dei parametri a lunghezza variabile, ad esempio stringhe e campi binario.Provide the size of parameters that have variable length, such as strings and binary fields.

Tale impostazione assicura che il provider allochi spazio sufficiente per i valori dei parametri a lunghezza variabile.This setting ensures that the provider allocates sufficient space for variable-length parameter values.

AggiungiAdd
Fare clic su questo pulsante per aggiungere un mapping dei parametri.Click to add a parameter mapping.

RimuoviRemove
Selezionare un mapping dei parametri nell'elenco e quindi fare clic su Rimuovi.Select a parameter mapping in the list and then click Remove.

Pagina Set dei risultati - Editor attività Esegui SQLResult Set Page - Execute SQL Task Editor

La pagina Set dei risultati della finestra di dialogo Editor attività Esegui SQL consente di eseguire il mapping dei risultati dell'istruzione SQL a variabili nuove o esistenti.Use the Result Set page of the Execute SQL Task Editor dialog to map the result of the SQL statement to new or existing variables. Le opzioni disponibili in questa finestra di dialogo sono disabilitate se ResultSet è impostato su Nonenella pagina Generale.The options in this dialog box are disabled if ResultSet on the General page is set to None.

OpzioniOptions

Nome risultatoResult Name
Dopo aver aggiunto un set di mapping del set di risultati facendo clic su Aggiungi, specificare un nome per il risultato.After you have added a result set mapping set by clicking Add, provide a name for the result. A seconda del tipo di set di risultati, è necessario utilizzare nomi specifici per i risultati.Depending on the result set type, you must use specific result names.

Se il set di risultati è di tipo Riga singola, è possibile utilizzare o il nome di una colonna restituita dalla query o il numero che rappresenta la posizione di una colonna nell'elenco di colonne di una colonna restituita dalla query.If the result set type is Single row, you can use either the name of a column returned by the query or the number that represents the position of a column in the column list of a column returned by the query.

Se il set di risultati è di tipo Set dei risultati completo o XML, sarà necessario usare 0 come nome del set di risultati.If the result set type is Full result set or XML, you must use 0 as the result set name.

Nome variabileVariable Name
Eseguire il mapping di set di risultati a una variabile selezionando una variabile oppure fare clic su < nuova variabile... > per aggiungere una nuova variabile tramite la Aggiungi variabile la finestra di dialogo.Map the result set to a variable by selecting a variable or click <New variable...> to add a new variable by using the Add Variable dialog box.

AggiungiAdd
Fare clic su questo pulsante per aggiungere un mapping del set di risultati.Click to add a result set mapping.

RimuoviRemove
Selezionare un mapping del set di risultati e quindi fare clic su Rimuovi.Select a result set mapping in the list and then click Remove.

Parametri di attività Esegui SQLParameters in the Execute SQL Task

Le istruzioni SQL e le stored procedure usano spesso parametri di input , parametri di output e codici restituiti.SQL statements and stored procedures frequently use input parameters, output parameters, and return codes. In Integration ServicesIntegration Services, l'attività Esegui SQL supporta i tipi di parametro Input, Output e ReturnValue.In Integration ServicesIntegration Services, the Execute SQL task supports the Input, Output, and ReturnValue parameter types. Usare il tipo Input per parametri di input, Output per parametri di output e ReturnValue per i codici restituiti.You use the Input type for input parameters, Output for output parameters, and ReturnValue for return codes.

Nota

È possibile utilizzare parametri in un'attività Esegui SQL solo se il provider di dati li supporta.You can use parameters in an Execute SQL task only if the data provider supports them.

Sui parametri inclusi nei comandi SQL, comprese le query e le stored procedure, viene eseguito il mapping a variabili definite dall'utente create nell'ambito dell'attività Esegui SQL, in un contenitore padre o nell'ambito del pacchetto.Parameters in SQL commands, including queries and stored procedures, are mapped to user-defined variables that are created within the scope of the Execute SQL task, a parent container, or within the scope of the package. I valori delle variabili possono essere impostati in fase di progettazione o popolati dinamicamente in fase di esecuzione.The values of variables can be set at design time or populated dynamically at run time. È inoltre possibile eseguire il mapping dei parametri a variabili di sistema.You can also map parameters to system variables. Per altre informazioni, vedere Variabili di Integration Services (SSIS) e Variabili di sistema.For more information, see Integration Services (SSIS) Variables and System Variables.

Tuttavia, l'utilizzo di parametri e di codici restituiti in un'attività Esegui SQL non si limita solo alla conoscenza dei tipi di parametro supportati dall'attività e del modo in cui si esegue il mapping di questi parametri.However, working with parameters and return codes in an Execute SQL task is more than just knowing what parameter types the task supports and how these parameters will be mapped. Sono previsti ulteriori requisiti e linee guida per utilizzare correttamente i parametri e i codici restituiti nell'attività Esegui SQL.There are additional usage requirements and guidelines to successfully use parameters and return codes in the Execute SQL task. Nella parte restante di questo argomento vengono illustrati tali requisiti e linee guida:The remainder of this topic covers these usage requirements and guidelines:

Gli indicatori e i nomi dei parametri Parameter names and markers

Nella sintassi del comando SQL possono essere utilizzati marcatori di parametro diversi, a seconda del tipo di connessione utilizzato dall'attività Esegui SQL.Depending on the connection type that the Execute SQL task uses, the syntax of the SQL command uses different parameter markers. Ad esempio, il ADO.NETADO.NET tipo gestione connessione è necessario che il comando SQL di un marcatore di parametro nel formato @varParameter , mentre il tipo di connessione OLE DB richiede il marcatore di parametro punto interrogativo (?).For example, the ADO.NETADO.NET connection manager type requires that the SQL command uses a parameter marker in the format @varParameter, whereas OLE DB connection type requires the question mark (?) parameter marker.

Anche i nomi che è possibile utilizzare come nomi di parametro nei mapping tra variabili e parametri variano a seconda del tipo di gestione connessione.The names that you can use as parameter names in the mappings between variables and parameters also vary by connection manager type. Il tipo di gestione connessione ADO.NETADO.NET utilizza ad esempio un nome definito dall'utente con prefisso @, mentre il tipo di gestione connessione OLE DB richiede nomi di parametro costituiti dal valore numerico di un ordinale in base 0.For example, the ADO.NETADO.NET connection manager type uses a user-defined name with a @ prefix, whereas the OLE DB connection manager type requires that you use the numeric value of a 0-based ordinal as the parameter name.

Nella tabella seguente sono riepilogati i requisiti dei comandi SQL, a seconda dei tipi di gestione connessione utilizzati dall'attività Esegui SQL.The following table summarizes the requirements for SQL commands for the connection manager types that the Execute SQL task can use.

Tipo di connessioneConnection type Marcatore di parametroParameter marker Nome parametroParameter name Comando SQL di esempioExample SQL command
ADOADO ?? Param1, Param2, …Param1, Param2, … SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
ADO.NETADO.NET @<Nome parametro >@<parameter name> @<Nome parametro >@<parameter name> Selezionare FirstName, LastName, spostare il titolo da Person. Contact in cui ContactID =@parmContactIDSELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = @parmContactID
ODBCODBC ?? 1, 2, 3, …1, 2, 3, … SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
EXCEL e OLE DBEXCEL and OLE DB ?? 0, 1, 2, 3, …0, 1, 2, 3, … SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

Utilizzare i parametri con ADO.NET e le gestioni connessioni ADOUse parameters with ADO.NET and ADO Connection Managers

ADO.NETADO.NETe le gestioni connessioni ADO hanno requisiti specifici per i comandi SQL che utilizzano parametri: and ADO connection managers have specific requirements for SQL commands that use parameters:

  • ADO.NETADO.NETgestioni connessioni richiedono che il comando SQL utilizzi nomi di parametro come marcatori di parametro. connection managers require that the SQL command use parameter names as parameter markers. È pertanto possibile eseguire il mapping direttamente delle variabili ai parametri.This means that variables can be mapped directly to parameters. Se ad esempio sulla variabile @varName viene eseguito il mapping a un parametro di nome @parName , fornirà il valore per il parametro @parName.For example, the variable @varName is mapped to the parameter named @parName and provides a value to the parameter @parName.

  • Per le gestioni connessioni ADO, è necessario che il comando SQL utilizzi punti interrogativi (?) come marcatori di parametro.ADO connection managers require that the SQL command use question marks (?) as parameter markers. Tuttavia, come nomi di parametro è possibile utilizzare qualsiasi nome definito dall'utente, ad eccezione dei valori interi.However, you can use any user-defined name, except for integer values, as parameter names.

    Per fornire i valori ai parametri sulle variabili viene eseguito il mapping ai nomi di parametro.To provide values to parameters, variables are mapped to parameter names. L'attività Esegui SQL utilizza quindi il valore ordinale del nome di parametro nell'elenco dei parametri per caricare i valori dalle variabili ai parametri.Then, the Execute SQL task uses the ordinal value of the parameter name in the parameter list to load values from variables to parameters.

Utilizzare i parametri con EXCEL, ODBC e gestioni connessioni OLE DBUse parameters with EXCEL, ODBC, and OLE DB Connection Managers

Per le gestioni connessioni EXCEL, ODBC e OLE DB, è necessario che il comando SQL utilizzi punti interrogativi (?) come marcatori di parametro e valori numerici in base 0 o in base 1 come nomi di parametro.EXCEL, ODBC, and OLE DB connection managers require that the SQL command use question marks (?) as parameter markers and 0-based or 1-based numeric values as parameter names. Se l'attività Esegui SQL utilizza la gestione connessione ODBC, il nome del parametro di cui viene eseguito il mapping al primo parametro nella query è 1, altrimenti è 0.If the Execute SQL task uses the ODBC connection manager, the parameter name that maps to the first parameter in the query is named 1; otherwise, the parameter is named 0. Per i parametri successivi, il valore numerico del nome del parametro indica il parametro del comando SQL a cui viene eseguito il mapping del nome di parametro.For subsequent parameters, the numeric value of the parameter name indicates the parameter in the SQL command that the parameter name maps to. Sul parametro di nome 3, ad esempio, viene eseguito il mapping al terzo parametro, rappresentato dal terzo punto interrogativo (?) nel comando SQL.For example, the parameter named 3 maps to the third parameter, which is represented by the third question mark (?) in the SQL command.

Per fornire i valori ai parametri, sulle variabili viene eseguito il mapping ai nomi di parametro e l'attività Esegui SQL utilizza il valore ordinale del nome di parametro per caricare i valori dalle variabili ai parametri.To provide values to parameters, variables are mapped to parameter names and the Execute SQL task uses the ordinal value of the parameter name to load values from variables to parameters.

A seconda del provider utilizzato dalla gestione connessione, alcuni tipi di dati OLE DB potrebbero non essere supportati.Depending on the provider that the connection manager uses, some OLE DB data types may not be supported. Il driver per Excel, ad esempio, riconosce solo un set limitato di tipi di dati.For example, the Excel driver recognizes only a limited set of data types. Per altre informazioni sul comportamento del provider Jet usato insieme al driver per Excel, vedere Origine Excel.For more information about the behavior of the Jet provider with the Excel driver, see Excel Source.

Utilizzare i parametri con le gestioni connessioni OLE DBUse parameters with OLE DB Connection Managers

Quando l'attività Esegui SQL usa la gestione connessione OLE DB, è disponibile la proprietà BypassPrepare dell'attività.When the Execute SQL task uses the OLE DB connection manager, the BypassPrepare property of the task is available. Questa proprietà deve essere impostata su true se l'attività Esegui SQL usa istruzioni SQL con parametri.You should set this property to true if the Execute SQL task uses SQL statements with parameters.

Quando si utilizza una gestione connessione OLE DB, non è possibile utilizzare sottoquery con parametri, perché l'attività Esegui SQL non può derivare le informazioni sui parametri tramite il provider OLE DB.When you use an OLE DB connection manager, you cannot use parameterized subqueries because the Execute SQL Task cannot derive parameter information through the OLE DB provider. Tuttavia, è possibile utilizzare un'espressione per concatenare i valori dei parametri nella stringa di query e impostare la proprietà SqlStatementSource dell'attività.However, you can use an expression to concatenate the parameter values into the query string and to set the SqlStatementSource property of the task.

Utilizzare i parametri con tipi di dati data e ora Use parameters with date and time data types

Utilizzare i parametri di data e ora con le gestioni connessioni ADO e ADO.NETUse date and time parameters with ADO.NET and ADO Connection Managers

Durante la lettura dei tipi di dati di SQL ServerSQL Server, time and datetimeoffset, un'attività Esegui SQL che usa una gestione connessione ADO.NETADO.NET o ADO prevede i requisiti aggiuntivi seguenti:When reading data of the SQL ServerSQL Server types, time and datetimeoffset, an Execute SQL task that uses either an ADO.NETADO.NET or ADO connection manager has the following additional requirements:

  • Per i dati time, una gestione connessione ADO.NETADO.NET richiede che i dati vengano archiviati in un parametro con tipo di parametro Input o Output e con tipo di dati string.For time data, an ADO.NETADO.NET connection manager requires this data to be stored in a parameter whose parameter type is Input or Output, and whose data type is string.

  • Per i dati datetimeoffset, una gestione connessione ADO.NETADO.NET richiede che i dati vengano archiviati in uno dei parametri seguenti:For datetimeoffset data, an ADO.NETADO.NET connection manager requires this data to be stored in one of the following parameters:

    • Un parametro il cui tipo di parametro è Input e il cui tipo di dati è string.A parameter whose parameter type is Input and whose data type is string.

    • Un parametro il cui tipo di parametro è Output o ReturnValuee il cui tipo di dati è datetimeoffset, stringa, o datetime2.A parameter whose parameter type is Output or ReturnValue, and whose data type is datetimeoffset, string, or datetime2. Se si seleziona un parametro il cui tipo di dati è string o datetime2, Integration ServicesIntegration Services converte i dati in string o datetime2.If you select a parameter whose data type is either string or datetime2, Integration ServicesIntegration Services converts the data to either string or datetime2.

  • Una gestione connessione ADO richiede che i dati time o datetimeoffset vengano archiviati in un parametro il cui tipo di parametro è Input o Output e il cui tipo di dati è adVarWchar.An ADO connection manager requires that either time or datetimeoffset data be stored in a parameter whose parameter type is Input or Output, and whose data type is adVarWchar.

    Per altre informazioni sui tipi di dati SQL ServerSQL Server e sul relativo mapping nei tipi di dati Integration ServicesIntegration Services, vedere Tipi di dati (Transact-SQL) e Tipi di dati di Integration Services.For more information about SQL ServerSQL Server data types and how they map to Integration ServicesIntegration Services data types, see Data Types (Transact-SQL) and Integration Services Data Types.

Utilizzare i parametri di data e ora con le gestioni connessioni OLE DBUse date and time parameters with OLE DB Connection Managers

Quando si usa una gestione connessione OLE DB, un'attività Esegui SQL prevede requisiti di archiviazione specifici per i tipi di dati di SQL ServerSQL Server date, time, datetime, datetime2 e datetimeoffset.When using an OLE DB connection manager, an Execute SQL task has specific storage requirements for data of the SQL ServerSQL Server data types, date, time, datetime, datetime2, and datetimeoffset. È necessario archiviare questi dati in uno dei seguenti tipi di parametro:You must store this data in one of the following parameter types:

  • Un parametro di input del tipo di dati NVARCHAR.An input parameter of the NVARCHAR data type.

  • Un parametro di output con il tipo di dati appropriato, come elencato nella tabella seguente.An output parameter of with the appropriate data type, as listed in the following table.

    Tipo di parametro diOutput Output parameter type Tipo di dati dateDate data type
    DBDATEDBDATE datadate
    DBTIME2DBTIME2 timetime
    DBTIMESTAMPDBTIMESTAMP datetime, datetime2datetime, datetime2
    DBTIMESTAMPOFFSETDBTIMESTAMPOFFSET datetimeoffsetdatetimeoffset

    Se i dati non vengono archiviati nel parametro di input o di output appropriato, il pacchetto non viene eseguito correttamente.If the data is not stored in the appropriate input or output parameter, the package fails.

Utilizzare i parametri di data e ora con le gestioni connessioni ODBCUse date and time parameters with ODBC Connection Managers

Quando si usa una gestione connessione ODBC, un'attività Esegui SQL prevede requisiti di archiviazione specifici per i tipi di dati di SQL ServerSQL Server date, time, datetime, datetime2 o datetimeoffset.When using an ODBC connection manager, an Execute SQL task has specific storage requirements for data with one of the SQL ServerSQL Server data types, date, time, datetime, datetime2, or datetimeoffset. È necessario archiviare questi dati in uno dei seguenti tipi di parametro:You must store this data in one of the following parameter types:

  • Un parametro di input del tipo di dati SQL_WVARCHARAn input parameter of the SQL_WVARCHAR data type

  • Un parametro di output con il tipo di dati appropriato, come elencato nella tabella seguente.An output parameter with the appropriate data type, as listed in the following table.

    Tipo di parametro diOutput Output parameter type Tipo di dati dateDate data type
    SQL_DATESQL_DATE datadate
    SQL_SS_TIME2SQL_SS_TIME2 timetime
    SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP

    oppure-or-

    SQL_TIMESTAMPSQL_TIMESTAMP
    datetime, datetime2datetime, datetime2
    SQL_SS_TIMESTAMPOFFSETSQL_SS_TIMESTAMPOFFSET datetimeoffsetdatetimeoffset

    Se i dati non vengono archiviati nel parametro di input o di output appropriato, il pacchetto non viene eseguito correttamente.If the data is not stored in the appropriate input or output parameter, the package fails.

Utilizzare i parametri nelle clausole WHERE Use parameters in WHERE clauses

I comandi SELECT, INSERT, UPDATE e DELETE includono spesso la clausola WHERE per specificare filtri che definiscono le condizioni che ogni riga nelle tabelle di origine deve soddisfare per essere qualificata per un comando SQL.SELECT, INSERT, UPDATE, and DELETE commands frequently include WHERE clauses to specify filters that define the conditions each row in the source tables must meet to qualify for an SQL command. I parametri specificano i valori del filtro per la clausola WHERE.Parameters provide the filter values in the WHERE clauses.

È possibile utilizzare marcatori di parametro per specificare dinamicamente i valori dei parametri.You can use parameter markers to dynamically provide parameter values. Le regole che determinano se è possibile utilizzare marcatori di parametro e nomi di parametro in un'istruzione SQL dipendono dal tipo di gestione connessione utilizzato dall'attività Esegui SQL.The rules for which parameter markers and parameter names can be used in the SQL statement depend on the type of connection manager that the Execute SQL uses.

Nella tabella seguente sono elencati esempi di comandi SELECT per tipo di gestione connessione.The following table lists examples of the SELECT command by connection manager type. Le istruzioni INSERT, UPDATE e DELETE sono analoghe.The INSERT, UPDATE, and DELETE statements are similar. Negli esempi l'istruzione SELECT viene usata per recuperare dalla tabella Product del database AdventureWorks2012AdventureWorks2012 i prodotti con ProductID compreso tra i valori specificati da due parametri.The examples use SELECT to return products from the Product table in AdventureWorks2012AdventureWorks2012 that have a ProductID greater than and less than the values specified by two parameters.

Tipo di connessioneConnection type Sintassi dell'istruzione SELECTSELECT syntax
EXCEL, ODBC e OLEDBEXCEL, ODBC, and OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
ADOADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
ADO.NETADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID

Gli esempi richiedono parametri con i nomi seguenti:The examples would require parameters that have the following names:

  • Per le gestioni connessioni EXCEL e OLED DB vengono utilizzati i nomi di parametro 0 e 1.The EXCEL and OLED DB connection managers use the parameter names 0 and 1. Per il tipo di connessione ODBC vengono utilizzati 1 e 2.The ODBC connection type uses 1 and 2.

  • Per il tipo di connessione ADO è possibile utilizzare qualsiasi nome per i due parametri, ad esempio Param1 e Param2, ma è necessario eseguire il mapping di entrambi i parametri in base alla relativa posizione ordinale nell'elenco di parametri.The ADO connection type could use any two parameter names, such as Param1 and Param2, but the parameters must be mapped by their ordinal position in the parameter list.

  • Il ADO.NETADO.NET tipo di connessione vengono utilizzati i nomi di parametro @parmMinProductID e @parmMaxProductID.The ADO.NETADO.NET connection type uses the parameter names @parmMinProductID and @parmMaxProductID.

Utilizzare i parametri con stored procedure Use parameters with stored procedures

Anche i comandi SQL che eseguono stored procedure possono utilizzare il mapping dei parametri.SQL commands that run stored procedures can also use parameter mapping. Come avviene per le regole delle query con parametri, anche le regole che determinano la modalità di utilizzo di marcatori di parametro e nomi di parametro dipendono dal tipo di gestione connessione utilizzato dall'attività Esegui SQL.The rules for how to use parameter markers and parameter names depends on the type of connection manager that the Execute SQL uses, just like the rules for parameterized queries.

Nella tabella seguente sono elencati esempi di comandi EXEC per tipo di gestione connessione.The following table lists examples of the EXEC command by connection manager type. Gli esempi eseguono la stored procedure uspGetBillOfMaterials nel database AdventureWorks2012AdventureWorks2012.The examples run the uspGetBillOfMaterials stored procedure in AdventureWorks2012AdventureWorks2012. Tale stored procedure usa i parametri di @StartProductID e @CheckDate e .The stored procedure uses the @StartProductID and @CheckDate input parameters.

Tipo di connessioneConnection type Sintassi dell'istruzione EXECEXEC syntax
EXCEL e OLEDBEXCEL and OLEDB EXEC uspGetBillOfMaterials ?, ?
ODBCODBC {call uspGetBillOfMaterials(?, ?)}

Per altre informazioni sulla sintassi ODBC, vedere l'argomento Procedure Parameters(Parametri di procedura) nella guida di riferimento per programmatori ODBC in MSDN Library.For more information about ODBC call syntax, see the topic, Procedure Parameters, in the ODBC Programmer's Reference in the MSDN Library.
ADOADO Se IsQueryStoredProcedure è impostata su False,EXEC uspGetBillOfMaterials ?, ?If IsQueryStoredProcedure is set to False, EXEC uspGetBillOfMaterials ?, ?

Se IsQueryStoredProcedure è impostata su True,uspGetBillOfMaterialsIf IsQueryStoredProcedure is set to True, uspGetBillOfMaterials
ADO.NETADO.NET Se IsQueryStoredProcedure è impostata su False,EXEC uspGetBillOfMaterials @StartProductID, @CheckDateIf IsQueryStoredProcedure is set to False, EXEC uspGetBillOfMaterials @StartProductID, @CheckDate

Se IsQueryStoredProcedure è impostata su True,uspGetBillOfMaterialsIf IsQueryStoredProcedure is set to True, uspGetBillOfMaterials

La sintassi per l'utilizzo dei parametri di output richiede che dopo ogni marcatore di parametro venga specificata la parola chiave OUTPUT.To use output parameters, the syntax requires that the OUTPUT keyword follow each parameter marker. Ad esempio, la sintassi del parametro di output seguente è corretta: EXEC myStoredProcedure ? OUTPUT.For example, the following output parameter syntax is correct: EXEC myStoredProcedure ? OUTPUT.

Per altre informazioni sull'utilizzo di parametri di input e di output con le stored procedure Transact-SQL, vedere EXECUTE (Transact-SQL).For more information about using input and output parameters with Transact-SQL stored procedures, see EXECUTE (Transact-SQL).

Mapping dei parametri di query a variabiliMap query parameters to variables

In questa sezione viene descritto come utilizzare un'istruzione SQL con parametri nell'attività Esegui SQL e creare i mapping tra variabili e parametri nell'istruzione SQL.This section describes how to use a parameterized SQL statement in the Execute SQL task and create mappings between variables and the parameters in the SQL statement.

  1. In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)aprire il pacchetto di Integration ServicesIntegration Services che si desidera utilizzare.In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services package you want to work with.

  2. In Esplora soluzioni fare doppio clic sul pacchetto per aprirlo.In Solution Explorer, double-click the package to open it.

  3. Fare clic sulla scheda Flusso di controllo .Click the Control Flow tab.

  4. Se il pacchetto non include già un'attività Esegui SQL, aggiungerne una al flusso di controllo del pacchetto.If the package does not already include an Execute SQL task, add one to the control flow of the package. Per altre informazioni, vedere Aggiunta o eliminazione di un'attività o un contenitore in un flusso di controllo.For more information, see Add or Delete a Task or a Container in a Control Flow.

  5. Fare doppio clic sull'attività Esegui SQL.Double-click the Execute SQL task.

  6. Specificare un comando SQL con parametri in uno dei modi seguenti:Provide a parameterized SQL command in one of the following ways:

    • Usare l'input diretto e digitare il comando SQL nella proprietà SQLStatement.Use direct input and type the SQL command in the SQLStatement property.

    • Usare l'input diretto, fare clic su Compila query, quindi creare un comando SQL usando gli strumenti grafici disponibili in Generatore query.Use direct input, click Build Query, and then create an SQL command using the graphical tools that the Query Builder provides.

    • Utilizzare una connessione file e quindi fare riferimento al file che contiene il comando SQL.Use a file connection and then reference the file that contains the SQL command.

    • Utilizzare una variabile e quindi fare riferimento alla variabile che contiene il comando SQL.Use a variable and then reference the variable that contains the SQL command.

      I marcatori di parametro che è possibile utilizzare nelle istruzioni SQL con parametri dipendono dal tipo di connessione utilizzato dall'attività Esegui SQL.The parameter markers that you use in parameterized SQL statements depend on the connection type that the Execute SQL task uses.

    Tipo di connessioneConnection type Marcatore di parametroParameter marker
    ADOADO ??
    ADO.NET e SQLMOBILEADO.NET and SQLMOBILE @<Nome parametro >@<parameter name>
    ODBCODBC ??
    EXCEL e OLE DBEXCEL and OLE DB ??

    Nella tabella seguente sono elencati esempi di comandi SELECT per tipo di gestione connessione.The following table lists examples of the SELECT command by connection manager type. I parametri specificano i valori del filtro per la clausola WHERE.Parameters provide the filter values in the WHERE clauses. Negli esempi l'istruzione SELECT viene usata per recuperare dalla tabella Product del database AdventureWorks2012AdventureWorks2012 i prodotti con ProductID compreso tra i valori specificati da due parametri.The examples use SELECT to return products from the Product table in AdventureWorks2012AdventureWorks2012 that have a ProductID greater than and less than the values specified by two parameters.

    Tipo di connessioneConnection type Sintassi dell'istruzione SELECTSELECT syntax
    EXCEL, ODBC e OLEDBEXCEL, ODBC, and OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    ADOADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    ADO.NETADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID
  7. Fare clic su Mapping parametri.Click Parameter Mapping.

  8. Per aggiungere un mapping parametri, fare clic su Aggiungi.To add a parameter mapping, click Add.

  9. Specificare un nome nella casella Nome parametro .Provide a name in the Parameter Name box.

    I nomi dei parametri utilizzati dipendono dal tipo di connessione utilizzato dall'attività Esegui SQL.The parameter names that you use depend on the connection type that the Execute SQL task uses.

    Tipo di connessioneConnection type Nome parametroParameter name
    ADOADO Param1, Param2, …Param1, Param2, …
    ADO.NET e SQLMOBILEADO.NET and SQLMOBILE @<Nome parametro >@<parameter name>
    ODBCODBC 1, 2, 3, …1, 2, 3, …
    EXCEL e OLE DBEXCEL and OLE DB 0, 1, 2, 3, …0, 1, 2, 3, …
  10. Selezionare una variabile nell'elenco Nome variabile .From the Variable Name list, select a variable. Per altre informazioni, vedere Aggiungere, eliminare o modificare l'ambito di una variabile definita dall'utente in un pacchetto.For more information, see Add, Delete, Change Scope of User-Defined Variable in a Package.

  11. Nell'elenco Direzione specificare se il parametro è un input, un output o un valore restituito.In the Direction list, specify if the parameter is an input, an output, or a return value.

  12. Nell'elenco Tipo di dati impostare il tipo di dati del parametro.In the Data Type list, set the data type of the parameter.

    Importante

    Il tipo di dati del parametro deve essere compatibile con quello della variabile.The data type of the parameter must be compatible with the data type of the variable.

  13. Ripetere i passaggi da 8 a 11 per ogni parametro nell'istruzione SQL.Repeat steps 8 through 11 for each parameter in the SQL statement.

    Importante

    I mapping dei parametri devono essere specificati nello stesso ordine con cui compaiono i parametri nell'istruzione SQL.The order of parameter mappings must be the same as the order in which the parameters appear in the SQL statement.

  14. Scegliere OK.Click OK.

Ottenere i valori dei codici restituiti Get the values of return codes

Una stored procedure può restituire un valore intero, denominato codice restituito, per indicare lo stato di esecuzione di una procedura.A stored procedure can return an integer value, called a return code, to indicate the execution status of a procedure. Per implementare codici restituiti nell'attività Esegui SQL, è necessario usare parametri di tipo ReturnValue .To implement return codes in the Execute SQL task, you use parameters of the ReturnValue type.

Nella tabella seguente sono elencati, per tipo di gestione connessione, esempi di comandi EXEC che implementano codici restituiti.The following table lists by connection type some examples of EXEC commands that implement return codes. In tutti gli esempi viene usato un parametro di input .All examples use an input parameter. Le regole che determinano la modalità di utilizzo di indicatori di parametro e nomi di parametro sono identiche per tutti i tipi di parametro:Input, Outpute ReturnValue.The rules for how to use parameter markers and parameter names are the same for all parameter types—Input, Output, and ReturnValue.

In alcune sintassi non è supportato l'utilizzo di valori letterali come parametri.Some syntax does not support parameter literals. In tali casi è necessario specificare il valore del parametro utilizzando una variabile.In that case, you must provide the parameter value by using a variable.

Tipo di connessioneConnection type Sintassi dell'istruzione EXECEXEC syntax
EXCEL e OLEDBEXCEL and OLEDB EXEC ? = myStoredProcedure 1
ODBCODBC {? = call myStoredProcedure(1)}

Per altre informazioni sulla sintassi ODBC, vedere l'argomento Procedure Parameters(Parametri di procedura) nella guida di riferimento per programmatori ODBC in MSDN Library.For more information about ODBC call syntax, see the topic, Procedure Parameters, in the ODBC Programmer's Reference in the MSDN Library.
ADOADO Se IsQueryStoreProcedure è impostata su False,EXEC ? = myStoredProcedure 1If IsQueryStoreProcedure is set to False, EXEC ? = myStoredProcedure 1

Se IsQueryStoreProcedure è impostata su True,myStoredProcedureIf IsQueryStoreProcedure is set to True, myStoredProcedure
ADO.NETADO.NET Set IsQueryStoreProcedure è impostato su True.Set IsQueryStoreProcedure is set to True.

myStoredProcedure

Nella sintassi illustrata nella tabella precedente, l'attività Esegui SQL usa il tipo di origine Input diretto per eseguire la stored procedure.In the syntax shown in the previous table, the Execute SQL task uses the Direct Input source type to run the stored procedure. L'attività Esegui SQL può usare anche il tipo di origine Connessione file per eseguire una stored procedure.The Execute SQL task can also use the File Connection source type to run a stored procedure. Indipendentemente dal fatto che l'attività Esegui SQL utilizzi il tipo di origine Input diretto o Connessione file , usare un parametro del tipo ReturnValue per implementare il codice restituito.Regardless of whether the Execute SQL task uses the Direct Input or File Connection source type, use a parameter of the ReturnValue type to implement the return code.

Per altre informazioni sull'utilizzo di codici restituiti con le stored procedure Transact-SQL, vedere RETURN (Transact-SQL).For more information about using return codes with Transact-SQL stored procedures, see RETURN (Transact-SQL).

Set di risultati nell’attività Esegui SQLResult Sets in the Execute SQL Task

La restituzione di un set di risultati all'attività Esegui SQL in un pacchetto di Integration ServicesIntegration Services dipende dal tipo di comando SQL utilizzato dall'attività.In an Integration ServicesIntegration Services package, whether a result set is returned to the Execute SQL task depends on the type of SQL command that the task uses. Se si utilizzano ad esempio le istruzioni SELECT, viene in genere restituito un set di risultati, mentre questo non avviene per le istruzioni INSERT.For example, a SELECT statement typically returns a result set, but an INSERT statement does not.

Anche il contenuto del set di risultati varia in base al comando SQL.What the result set contains also varies by SQL command. Il set di risultati restituito da un'istruzione SELECT può ad esempio contenere zero, una o più righe.For example, the result set from a SELECT statement can contain zero rows, one row, or many rows. Il set di risultati di un'istruzione SELECT che restituisce un conteggio o una somma contiene tuttavia una sola riga.However, the result set from a SELECT statement that returns a count or a sum contains only a single row.

Per usare i set di risultati in un'attività Esegui SQL non è sufficiente sapere se il comando SQL restituisce un set di risultati né conoscere il contenuto di tale set di risultati.Working with result sets in an Execute SQL task is more than just knowing whether the SQL command returns a result set and what that result set contains. Sono previsti ulteriori requisiti e linee guida per usare correttamente i set di risultati nell'attività Esegui SQL.There are additional usage requirements and guidelines to successfully use result sets in the Execute SQL task. Nella parte restante di questo argomento vengono illustrati tali requisiti e linee guida:The remainder of this topic covers these usage requirements and guidelines:

Specificare che un set di risultati tipo Specify a result set type

L'attività Esegui SQL supporta i tipi di set di risultati seguenti:The Execute SQL task supports the following types of result sets:

  • Se la query non restituisce risultati, sarà usato il set di risultati Nessuno .The None result set is used when the query returns no results. Questo set di risultati può essere usato ad esempio per le query che aggiungono, modificano ed eliminano record in una tabella.For example, this result set is used for queries that add, change, and delete records in a table.

  • Se la query restituisce una sola riga, sarà usato il set di risultati Riga singola .The Single row result set is used when the query returns only one row. Questo set di risultati può ad esempio essere usato per un'istruzione SELECT che restituisce un conteggio o una somma.For example, this result set is used for a SELECT statement that returns a count or a sum.

  • Se la query restituisce più righe, sarà usato il set di risultati Set dei risultati completo .The Full result set result set is used when the query returns multiple rows. Questo set di risultati può ad esempio essere usato per un'istruzione SELECT che recupera tutte le righe di una tabella.For example, this result set is used for a SELECT statement that retrieves all the rows in a table.

  • Se la query restituisce un set di risultati in formato XML, sarà usato il set di risultati XML .The XML result set is used when the query returns a result set in an XML format. Questo set di risultati può ad esempio essere usato per un'istruzione SELECT che include una clausola FOR XML.For example, this result set is used for a SELECT statement that includes a FOR XML clause.

    Se nell'attività Esegui SQL è usato il Set dei risultati completo e la query restituisce più set di righe, l'attività restituisce solo il primo di tali set.If the Execute SQL task uses the Full result set result set and the query returns multiple rowsets, the task returns only the first rowset. Se questo set di righe genera un errore, l'attività segnala l'errore.If this rowset generates an error, the task reports the error. Se altri set di righe generano errori, l'attività non li segnala.If other rowsets generate errors, the task does not report them.

Popolare una variabile con un set di risultati Populate a variable with a result set

Se il set di risultati restituito da una query è una riga singola, un set di righe o di tipo XML, sarà possibile associarlo a una variabile definita dall'utente.You can bind the result set that a query returns to a user-defined variable, if the result set type is a single row, a rowset, or XML.

Se il tipo di set di risultati è Riga singola, è possibile associare una colonna nel risultato restituito a una variabile usando il nome della colonna come nome del set di risultati oppure usare la posizione ordinale della colonna nell'elenco di colonne come nome del set di risultati.If the result set type is Single row, you can bind a column in the return result to a variable by using the column name as the result set name, or you can use the ordinal position of the column in the column list as the result set name. Il nome del set di risultati per la query SELECT Color FROM Production.Product WHERE ProductID = ? , ad esempio, potrebbe essere Color o 0.For example, the result set name for the query SELECT Color FROM Production.Product WHERE ProductID = ? could be Color or 0. Se la query restituisce più colonne e si desidera accedere ai valori in tutte le colonne, è necessario associare ogni colonna a una variabile diversa.If the query returns multiple columns and you want to access the values in all columns, you must bind each column to a different variable. Se si esegue il mapping delle colonne alle variabili usando numeri come nomi del set di risultati, i numeri riflettono l'ordine in cui le colonne vengono visualizzate nell'elenco di colonne della query.If you map columns to variables using numbers as result set names, the numbers reflect the order in which the columns appear in the column list of the query. Nella query SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?, ad esempio, viene usato 0 per la colonna Color e 1 per la colonna ListPrice .For example, in the query SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?, you use 0 for the Color column and 1 for the ListPrice column. La possibilità di usare un nome di colonna come nome di un set di risultati dipende dal provider per il quale l'attività è configurata.The ability to use a column name as the name of a result set depends on the provider that the task is configured to use. Non tutti i provider permettono l'uso di nomi di colonna.Not all providers make column names available.

Alcune query che restituiscono un singolo valore non includono nomi di colonna.Some queries that return a single value may not include column names. L'istruzione SELECT COUNT (*) FROM Production.Product non restituisce ad esempio alcun nome di colonna.For example, the statement SELECT COUNT (*) FROM Production.Product returns no column name. Per accedere al risultato restituito è possibile usare la posizione ordinale, 0, come nome del risultato.You can access the return result using the ordinal position, 0, as the result name. Per accedere al risultato restituito dal nome della colonna, la query deve includere un AS <nome alias > clausola per fornire un nome di colonna.To access the return result by column name, the query must include an AS <alias name> clause to provide a column name. Nell'istruzione SELECT COUNT (*)AS CountOfProduct FROM Production.Productè specificato il nome di colonna CountOfProduct .The statement SELECT COUNT (*)AS CountOfProduct FROM Production.Product, provides the CountOfProduct column. Per accedere alla colonna del risultato restituito è quindi possibile usare il nome di colonna, CountOfProduct , o la posizione ordinale, 0.You can then access the return result column using the CountOfProduct column name or the ordinal position, 0.

Se il set di risultati è di tipo Set dei risultati completo o XML, sarà necessario usare 0 come nome del set di risultati.If the result set type is Full result set or XML, you must use 0 as the result set name.

Quando si esegue il mapping di una variabile a un set di risultati con il tipo di set di risultati Riga singola , la variabile deve avere un tipo di dati compatibile con quello della colonna contenuta nel set di risultati.When you map a variable to a result set with the Single row result set type, the variable must have a data type that is compatible with the data type of the column that the result set contains. Non è possibile, ad esempio, eseguire il mapping di un set di risultati che contiene una colonna con un tipo di dati String a una variabile con un tipo di dati numerico.For example, a result set that contains a column with a String data type cannot map to a variable with a numeric data type. Se si imposta la proprietà TypeConversionMode su Allowed, l'attività Esegui SQL tenterà di convertire il parametro di output e i risultati della query nel tipo di dati della variabile a cui sono assegnati i risultati.When you set the TypeConversionMode property to Allowed, the Execute SQL Task will attempt to convert output parameter and query results to the data type of the variable the results are assigned to.

È possibile eseguire il mapping di un set di risultati XML solo a una variabile con il tipo di dati String o Object .An XML result set can map only to a variable with the String or Object data type. Se la variabile ha il tipo di dati String , l'attività Esegui SQL restituisce una stringa e l'origine XML può utilizzare i dati XML.If the variable has the String data type, the Execute SQL task returns a string and the XML source can consume the XML data. Se la variabile ha il tipo di dati Object , l'attività Esegui SQL restituisce un oggetto DOM (Document Object Model).If the variable has the Object data type, the Execute SQL task returns a Document Object Model (DOM) object.

Un Set dei risultati completo deve eseguire il mapping a una variabile con il tipo di dati Object .A Full result set must map to a variable of the Object data type. Il risultato restituito è un oggetto set di righe.The return result is a rowset object. È possibile usare un contenitore Ciclo ForEach per estrarre i valori di riga della tabella archiviati nella variabile Object nelle variabili del pacchetto e quindi usare un'attività Script per scrivere in un file i dati archiviati nelle variabili del pacchetto.You can use a Foreach Loop container to extract the table row values that are stored in the Object variable into package variables, and then use a Script Task to write the data stored in packages variables to a file. Per una dimostrazione dell'esecuzione di questa operazione tramite un contenitore Ciclo ForEach e un'attività Script, vedere l'esempio CodePlex, relativo all' esecuzione di parametri SQL e set di risultatisul sito Web msftisprodsamples.codeplex.com.For a demonstration on how to do this using a Foreach Loop container and a Script Task, see the CodePlex sample, Execute SQL Parameters and Result Sets, on msftisprodsamples.codeplex.com.

Nella tabella seguente è disponibile un riepilogo dei tipi di dati delle variabili di cui è possibile eseguire il mapping a set di risultati.The following table summarizes the data types of variables that can be mapped to result sets.

Tipo di set di risultatiResult set type Tipo di dati della variabileData type of variable Tipo di oggettoType of object
Riga singolaSingle row Qualunque tipo compatibile con la colonna del tipo nel set di risultati.Any type that is compatible with the type column in the result set. Non applicabileNot applicable
Set dei risultati predefinitoFull result set OggettoObject Se l'attività usa una gestione connessione nativa, incluse le gestioni connessioni ADO, OLE DB, Excel e ODBC, l'oggetto restituito è un oggetto RecordsetADO.If the task uses a native connection manager, including the ADO, OLE DB, Excel, and ODBC connection managers, the returned object is an ADO Recordset.

Se nell'attività viene usata una gestione connessione gestita, ad esempio la gestione connessione ADO.NETADO.NET, l'oggetto restituito è un oggetto System.Data.DataSet.If the task uses a managed connection manager, such as the ADO.NETADO.NET connection manager, then the returned object is a System.Data.DataSet.

È possibile usare un'attività Script per accedere all'oggetto System.Data.DataSet , come illustrato nell'esempio seguente.You can use a Script task to access the System.Data.DataSet object, as shown in the following example.

Dim dt As Data.DataTable

Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet) dt = ds.Tables(0)
XMLXML StringString StringString
XMLXML OggettoObject Se nell'attività è usata una gestione connessione nativa, incluse le gestioni connessioni ADO, OLE DB, Excel e ODBC, l'oggetto restituito è un oggetto MSXML6.IXMLDOMDocument.If the task uses a native connection manager, including the ADO, OLE DB, Excel, and ODBC connection managers, the returned object is an MSXML6.IXMLDOMDocument.

Se nell'attività viene usata una gestione connessione gestita, ad esempio la gestione connessione ADO.NETADO.NET, l'oggetto restituito è un oggetto System.Xml.XmlDocument.If the task uses a managed connection manager, such as the ADO.NETADO.NET connection manager, the returned object is a System.Xml.XmlDocument.

La variabile può essere definita nell'ambito dell'attività Esegui SQL o nell'ambito del pacchetto.The variable can be defined in the scope of the Execute SQL task or the package. Se la variabile viene definita nell'ambito del pacchetto, il set di risultati sarà disponibile per altre attività e contenitori all'interno del pacchetto e per altri pacchetti eseguiti dalle attività Esegui pacchetto o Esegui pacchetto DTS 2000.If the variable has package scope, the result set is available to other tasks and containers within the package, and is available to any packages run by the Execute Package or Execute DTS 2000 Package tasks.

Quando si esegue il mapping di una variabile a un set di risultati di tipo Riga singola , i valori non costituiti da stringhe restituiti dall'istruzione SQL vengono convertiti in stringhe se sussistono le condizioni seguenti:When you map a variable to a Single row result set, non-string values that the SQL statement returns are converted to strings when the following conditions are met:

  • La proprietà TypeConversionMode è impostata su true.The TypeConversionMode property is set to true. Il valore della proprietà viene impostato nella finestra Proprietà o tramite l' Editor attività Esegui SQL.You set the property value in the Properties window or by using the Execute SQL Task Editor.

  • La conversione non comporterà il troncamento dei dati.The conversion will not result in data truncation.

Mapping di set di risultati a variabili in un'attività Esegui SQLMap result sets to variables in an Execute SQL Task

In questa sezione viene descritto come creare un mapping tra un set di risultati e una variabile in un'attività Esegui SQL.This section describes how to create a mapping between a result set and a variable in an Execute SQL task. Se su un set di risultati viene eseguito il mapping a una variabile, sarà disponibile anche per altri elementi nel pacchetto.Mapping a result set to a variable makes the result set available to other elements in the package. Si consideri ad esempio un'attività Script contenente uno script in grado di leggere la variabile e quindi utilizzare i valori del set di risultati oppure un'origine XML in grado di utilizzare il set di risultati archiviato in una variabile.For example, a script in a Script task can read the variable and then use the values from the result set or an XML source can consume the result set stored in a variable. Se viene generato da un pacchetto padre, il set di risultati potrà essere reso disponibile a un pacchetto figlio chiamato da un'attività Esegui pacchetto mappando tale set di risultati a una variabile nel pacchetto padre e quindi creando nel pacchetto figlio una configurazione Variabile pacchetto padre, per l'archiviazione del valore della variabile padre.If the result set is generated by a parent package, the result set can be made available to a child package called by an Execute Package task by mapping the result set to a variable in the parent package, and then creating a parent package variable configuration in the child package to store the parent variable value.

  1. In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)aprire il progetto di Integration ServicesIntegration Services che contiene il pacchetto desiderato.In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want.

  2. In Esplora soluzionifare doppio clic sul pacchetto per aprirlo.In Solution Explorer, double-click the package to open it.

  3. Fare clic sulla scheda Flusso di controllo .Click the Control Flow tab.

  4. Se il pacchetto non include già un'attività Esegui SQL, aggiungerne una al flusso di controllo del pacchetto.If the package does not already include an Execute SQL task, add one to the control flow of the package. Per altre informazioni, vedere Aggiunta o eliminazione di un'attività o un contenitore in un flusso di controllo.For more information, see Add or Delete a Task or a Container in a Control Flow.

  5. Fare doppio clic sull'attività Esegui SQL.Double-click the Execute SQL task.

  6. Nella pagina Generale della finestra di dialogo Editor attività Esegui SQL selezionare il tipo di set di risultati Riga singola, Set dei risultati completoo XML .In the Execute SQL Task Editor dialog box, on the General page, select the Single row, Full result set, or XML result set type.

  7. Fare clic su Set dei risultati.Click Result Set.

  8. Per aggiungere un mapping del set dei risultati, fare clic su Aggiungi.To add a result set mapping, click Add.

  9. Selezionare una variabile dall'elenco Variables Name (Nome variabili) o crearne una nuova.From the Variables Name list, select a variable or create a new variable. Per altre informazioni, vedere Aggiungere, eliminare o modificare l'ambito di una variabile definita dall'utente in un pacchetto.For more information, see Add, Delete, Change Scope of User-Defined Variable in a Package.

  10. Nell'elenco Nome risultato modificare il nome del set di risultati, se lo si desidera.In the Result Name list, optionally, modify the name of the result set.

    È in genere possibile utilizzare il nome della colonna come nome del set di risultati oppure utilizzare la posizione ordinale della colonna nell'elenco di colonne come set di risultati.In general, you can use the column name as the result set name, or you can use the ordinal position of the column in the column list as the result set. La possibilità di utilizzare un nome di colonna come nome del set di risultati dipende dal provider per il quale l'attività è configurata.The ability to use a column name as the result set name depends on the provider that the task is configured to use. Non tutti i provider permettono l'uso di nomi di colonna.Not all providers make column names available.

  11. Scegliere OK.Click OK.

Risolvere i problemi relativi all'attività Esegui SQLTroubleshoot the Execute SQL task

È possibile registrare le chiamate eseguite dall'attività Esegui SQL a provider di dati esterni.You can log the calls that the Execute SQL task makes to external data providers. Questa funzionalità di registrazione può essere utilizzata per risolvere i problemi relativi ai comandi SQL eseguiti dall'attività Esegui SQL.You can use this logging capability to troubleshoot the SQL commands that the Execute SQL task runs. Per registrare le chiamate eseguite dall'attività Esegui SQL a provider di dati esterni, abilitare la registrazione dei pacchetti e selezionare l'evento Diagnostic a livello del pacchetto.To log the calls that the Execute SQL task makes to external data providers, enable package logging and select the Diagnostic event at the package level. Per altre informazioni, vedere Risoluzione dei problemi relativi agli strumenti per l'esecuzione del pacchetto.For more information, see Troubleshooting Tools for Package Execution.

Talvolta un comando SQL o una stored procedure restituiscono più set di risultati.Sometimes a SQL command or stored procedure returns multiple result sets. Tali set di risultati includono non solo i set di righe che sono il risultato di query SELECT , ma anche valori singoli che sono il risultato di errori di istruzioni RAISERROR o PRINT .These result sets include not only rowsets that are the result of SELECT queries, but single values that are the result of errors of RAISERROR or PRINT statements. L'attività ignora gli errori nei set di risultati che si verificano dopo il primo set di risultati in base al tipo di gestione connessione utilizzata:Whether the task ignores errors in result sets that occur after the first result set depends on the type of connection manager that is used:

  • Se si utilizzano le gestioni connessioni OLE DB e ADO, l'attività ignora i set di risultati che si verificano dopo il primo set di risultati.When you use OLE DB and ADO connection managers, the task ignores the result sets that occur after the first result set. Pertanto, con tali gestioni connessioni, l'attività ignora un errore restituito da un comando SQL o da una stored procedure quando l'errore non fa parte del primo set di risultati.Therefore, with these connection managers, the task ignores an error returned by an SQL command or a stored procedure when the error is not part of the first result set.

  • Se si utilizzano le gestioni connessioni ODBC e ADO.NET, l'attività non ignora i set di risultati che si verificano dopo il primo set di risultati.When you use ODBC and ADO.NET connection managers, the task does not ignore result sets that occur after the first result set. Con queste gestioni connessioni, l'attività non riesce e viene restituito un errore qualora un set di risultati diverso dal primo set di risultati contiene un errore.With these connection managers, the task will fail with an error when a result set other than the first result set contains an error.

Voci di log personalizzateCustom Log Entries

Nella tabella seguente è indicata la voce di log personalizzata disponibile per l'attività Esegui SQL.The following table describes the custom log entry for the Execute SQL task. Per altre informazioni, vedere registrazione di Integration Services (SSIS).For more information, see Integration Services (SSIS) Logging.

Voce di logLog entry DescriptionDescription
ExecuteSQLExecutingQueryExecuteSQLExecutingQuery Fornisce informazioni sulle fasi di esecuzione dell'istruzione SQL.Provides information about the execution phases of the SQL statement. Vengono scritte voci di log quando l'attività acquisisce la connessione al database, quando inizia a preparare l'istruzione SQL e al termine dell'esecuzione dell'istruzione SQL.Log entries are written when the task acquires connection to the database, when the task starts to prepare the SQL statement, and after the execution of the SQL statement is completed. La voce di log per la fase di preparazione include l'istruzione SQL utilizzata dall'attività.The log entry for the prepare phase includes the SQL statement that the task uses.