Utilizzo di variabili nell'attività ScriptUsing Variables in the Script Task

Le variabili rendono possibile lo scambio di dati tra l'attività Script e altri oggetti del pacchetto.Variables make it possible for the Script task to exchange data with other objects in the package. Per altre informazioni, vedere Integration Services (SSIS) Variables.For more information, see Integration Services (SSIS) Variables.

L'attività Script utilizza il Variables proprietà del Dts oggetto da leggere e scrivere Variable oggetti nel pacchetto.The Script task uses the Variables property of the Dts object to read from and write to Variable objects in the package.

Nota

Il Value proprietà del Variable classe è di tipo oggetto.The Value property of the Variable class is of type Object. Poiché l'attività Script deve Option Strict abilitato, è necessario eseguire il cast di Value proprietà nel tipo appropriato prima che sia possibile utilizzarlo.Because the Script task has Option Strict enabled, you must cast the Value property to the appropriate type before you can use it.

Aggiungere variabili esistenti per il ReadOnlyVariables e ReadWriteVariables Elenca il Editor attività Script per renderli disponibili per lo script personalizzato.You add existing variables to the ReadOnlyVariables and ReadWriteVariables lists in the Script Task Editor to make them available to the custom script. Tenere presente che per i nomi delle variabili viene applicata la distinzione tra maiuscole e minuscole.Keep in mind that variable names are case-sensitive. All'interno dello script, accedere alle variabili di entrambi i tipi tramite il Variables proprietà del Dts oggetto.Within the script, you access variables of both types through the Variables property of the Dts object. Utilizzare il valore proprietà da leggere e scrivere in singole variabili.Use the Value property to read from and write to individual variables. L'attività Script gestisce in modo trasparente il blocco mentre lo script legge e modifica i valori delle variabili.The Script task transparently manages locking as the script reads and modifies the values of variables.

È possibile utilizzare il metodo Contains della raccolta Variables restituita dalla proprietà Variables per verificare l'esistenza di una variabile prima di utilizzarla nel codice.You can use the Contains method of the Variables collection returned by the Variables property to check for the existence of a variable before using it in your code.

È inoltre possibile utilizzare il VariableDispenser proprietà (Dts.VariableDispenser) per l'utilizzo di variabili nell'attività Script.You can also use the VariableDispenser property (Dts.VariableDispenser) to work with variables in the Script task. Quando si utilizza VariableDispenser, è necessario gestire sia la semantica di blocco che il cast dei tipi di dati per i valori delle variabili nel codice personalizzato.When using the VariableDispenser, you must handle both the locking semantics and the casting of data types for variable values in your own code. Può essere necessario utilizzare la proprietà VariableDispenser anziché la proprietà Variables se si desidera utilizzare una variabile non disponibile in fase di progettazione ma che viene creata a livello di programmazione in fase di esecuzione.You may need to use the VariableDispenser property instead of the Variables property if you want to work with a variable that is not available at design time but is created programmatically at run time.

Utilizzo dell'attività Script in un contenitore Ciclo ForeachUsing the Script Task within a Foreach Loop Container

Quando un'attività Script viene eseguita ripetutamente in un contenitore Ciclo Foreach, lo script deve in genere gestire il contenuto dell'elemento corrente nell'enumeratore.When a Script task runs repeatedly within a Foreach Loop container, the script usually needs to work with the contents of the current item in the enumerator. Ad esempio, se si utilizza l'enumeratore Foreach File, lo script deve riconoscere il nome di file corrente. Se si utilizza l'enumeratore Foreach ADO, lo script deve conoscere il contenuto delle colonne nella riga di dati corrente.For example, when using a Foreach File enumerator, the script needs to know the current file name; when using a Foreach ADO enumerator, the script needs to know the contents of the columns in the current row of data.

Le variabili rendono possibile questa comunicazione tra il contenitore Ciclo Foreach e l'attività Script.Variables make this communication between the Foreach Loop container and the Script task possible. Nel mapping variabili pagina del Editor ciclo Foreach, assegnare variabili a ogni elemento di dati restituito da un singolo elemento enumerato.On the Variable Mappings page of the Foreach Loop Editor, assign variables to each item of data that is returned by a single enumerated item. Ad esempio, un enumeratore Foreach File restituisce solo un nome di file in corrispondenza dell'indice 0 e pertanto richiede solo un mapping di variabili, mentre un enumeratore che restituisce diverse colonne di dati in ogni riga richiede che venga eseguito il mapping di una variabile diversa a ogni colonna che si desidera utilizzare nell'attività Script.For example, a Foreach File enumerator returns only a file name at Index 0 and therefore requires only one variable mapping, whereas an enumerator that returns several columns of data in each row requires you to map a different variable to each column that you want to use in the Script task.

Dopo che è stato eseguito il mapping degli elementi enumerati alle variabili, è necessario aggiungere le variabili mappate al ReadOnlyVariables proprietà il Script pagina del Editor attività Script per renderli disponibili per lo script.After you have mapped enumerated items to variables, then you must add the mapped variables to the ReadOnlyVariables property on the Script page of the Script Task Editor to make them available to your script. Per un esempio di un'attività Script all'interno di un contenitore ciclo Foreach che elabora i file di immagine in una cartella, vedere utilizzo delle immagini con l'attività Script.For an example of a Script task within a Foreach Loop container that processes the image files in a folder, see Working with Images with the Script Task.

Esempio di variabiliVariables Example

Nell'esempio seguente viene illustrato come accedere e utilizzare le variabili in un'attività Script per determinare il percorso del flusso di lavoro del pacchetto.The following example demonstrates how to access and use variables in a Script task to determine the path of package workflow. Nell'esempio si presuppone di aver creato le variabili integer denominate CustomerCount e MaxRecordCount e aggiunte al ReadOnlyVariables insieme il Editor attività Script.The sample assumes that you have created integer variables named CustomerCount and MaxRecordCount and added them to the ReadOnlyVariables collection in the Script Task Editor. La variabile CustomerCount contiene il numero di record di clienti da importare.The CustomerCount variable contains the number of customer records to be imported. Se il valore è maggiore del valore MaxRecordCount, l'attività Script riporta un errore.If its value is greater than the value of MaxRecordCount, the Script task reports failure. Quando si verifica un errore perché la soglia MaxRecordCount è stata superata, il percorso di errore del flusso di lavoro può implementare l'eventuale pulizia richiesta.When a failure occurs because the MaxRecordCount threshold has been exceeded, the error path of the workflow can implement any required clean-up.

Per compilare correttamente l'esempio, è necessario aggiungere un riferimento all'assembly Microsoft.SqlServer.ScriptTask.To successfully compile the sample, you need to add a reference to the Microsoft.SqlServer.ScriptTask assembly.

Public Sub Main()  

    Dim customerCount As Integer  
    Dim maxRecordCount As Integer  

    If Dts.Variables.Contains("CustomerCount") = True AndAlso _  
        Dts.Variables.Contains("MaxRecordCount") = True Then  

        customerCount = _  
            CType(Dts.Variables("CustomerCount").Value, Integer)  
        maxRecordCount = _  
            CType(Dts.Variables("MaxRecordCount").Value, Integer)  

    End If  

    If customerCount > maxRecordCount Then  
            Dts.TaskResult = ScriptResults.Failure  
    Else  
            Dts.TaskResult = ScriptResults.Success  
    End If  

End Sub  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime;  

public class ScriptMain  
{  

    public void Main()  
    {  
        int customerCount;  
        int maxRecordCount;  

        if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true)  

        {  
            customerCount = (int) Dts.Variables["CustomerCount"].Value;  
            maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value;  

        }  

        if (customerCount>maxRecordCount)  
        {  
            Dts.TaskResult = (int)ScriptResults.Failure;  
        }  
        else  
        {  
            Dts.TaskResult = (int)ScriptResults.Success;  
        }  

    }  

}  

Vedere ancheSee Also

Integration Services ( SSIS ) Variabili Integration Services (SSIS) Variables
Utilizzare le variabili nei pacchettiUse Variables in Packages