Tipi di dati nelle espressioni di Integration ServicesIntegration Services Data Types in Expressions

L'analizzatore di espressioni usa i tipi di dati di Integration ServicesIntegration Services .The expression evaluator uses Integration ServicesIntegration Services data types. La prima volta che i dati entrano nel flusso di dati di un pacchetto di Integration ServicesIntegration Services il motore del flusso di dati converte i dati di tutte le colonne in un tipo di dati di Integration ServicesIntegration Services , mentre i dati delle colonne utilizzate da un'espressione hanno già un tipo di dati di Integration ServicesIntegration Services .When data first enters a data flow in an Integration ServicesIntegration Services package, the data flow engine converts all column data to an Integration ServicesIntegration Services data type, and the column data that an expression uses already has an Integration ServicesIntegration Services data type. Le espressioni utilizzate nelle trasformazioni Suddivisione condizionale e Colonna derivata possono fare riferimento alle colonne perché fanno parte di un flusso di dati che include dati di colonna.Expressions used in the Conditional Split and the Derived Column transformations can reference columns because they are part of a data flow that includes column data.

VariabiliVariables

Nelle espressioni è possibile utilizzare anche variabili.Expressions can also use variables. Le variabili hanno tipo di dati Variant e, prima di valutare l'espressione, l'analizzatore di espressioni converte il tipo di dati di una variabile da un sottotipo Variant a un tipo di dati di Integration ServicesIntegration Services .Variables have a Variant data type and the expression evaluator converts the data type of a variable from a Variant subtype to an Integration ServicesIntegration Services data type before it evaluates the expression. Per le variabili è possibile usare solo un subset dei tipi di dati di Integration ServicesIntegration Services .Variables can use only a subset of the Integration ServicesIntegration Services data types. Per una variabile non è ad esempio possibile utilizzare un tipo di dati BLOB (Binary Large Object).For example, a variable cannot use a Binary Large Object Block (BLOB) data type.

Per altre informazioni sui tipi di dati di Integration ServicesIntegration Services e sul mapping dei tipi di dati Variant ai tipi di dati di Integration ServicesIntegration Services , vedere Tipi di dati di Integration Services.For more information about Integration ServicesIntegration Services data types and the mapping of Variant data types to Integration ServicesIntegration Services data types, see Integration Services Data Types.

Valori letteraliLiterals

Le espressioni possono includere anche stringhe, valori booleani e valori letterali numerici.In addition, expressions can include string, Boolean, and numeric literals. Per altre informazioni sulla conversione di valori letterali numerici in tipi di dati numerici di Integration ServicesIntegration Services, vedere Valori letterali (SSIS).For more information about converting numeric literals to numeric Integration ServicesIntegration Services data types, see Literals (SSIS).

StringheStrings

È possibile usare DT_STR o DT_WSTR come tipo restituito di un'espressione.You can use either DT_STR or DT_WSTR as the return type of an expression. All'interno di un'espressione, però, è supportato solo DT_WSTR, mentre i valori DT_STR vengono convertiti in valori DT_WSTR.Inside an expression, however, only DT_WSTR is supported, and DT_STR values are converted to DT_WSTR values. Questo comportamento ha diverse implicazioni quando si scrive un'espressione.This behavior has several implications when you're writing an expression.

  • All'interno di un'espressione usare NULL(DT_WSTR, ...) anziché NULL(DT_STR, ...).Inside an expression, use NULL(DT_WSTR, ...) instead of NULL(DT_STR, ...). Per altre informazioni su questa funzione, vedere NULL (espressione SSIS).For more info about this function, see NULL (SSIS Expression).

  • All'interno di un'espressione si può usare solo la funzione CAST per eseguire il cast di un valore al tipo DT_STR alla radice dell'espressione, ovvero quando viene restituito il risultato finale dell'espressione.Inside an expression, you can only use the CAST function to cast a value to the DT_STR type at the root of the expression - that is, when you are returning the final result of the expression. Altrimenti usare il tipo DT_WSTR all'interno di un'espressione.Otherwise, use the DT_WSTR type within in expression.

    Osservare le espressioni nello screenshot seguente.Consider the expressions in the following screen shot.

    Tipi di dati nelle espressioni di SSIS StringString data types in SSIS expressions

  1. La prima espressione viene eseguita senza errori perché la funzione NULL(DT_STR, ...) si trova al livello radice dell'espressione.The first expression runs without error because the NULL(DT_STR, ...) function is at the root level of the expression.

  2. La seconda espressione viene eseguita senza errori perché usa NULL(DT_WSTR, ...).The second expression runs without error because it uses NULL(DT_WSTR, ...).

  3. La terza espressione genera un errore perché usa NULL(DT_STR, ...) all'interno dell'espressione.The third expression raises an error because it uses NULL(DT_STR, ...) inside the expression.

  4. La quarta espressione viene eseguita senza errori perché esegue il cast del risultato di NULL(DT_STR, ...) all'interno dell'espressione.The fourth expression runs without error because it casts the result of NULL(DT_STR, ...) inside the expression.

    L'analizzatore di espressioni gestisce questo cast in modo intelligente ed esegue il cast a DT_WSTR, non a DT_STR, perché riconosce che l'operazione non è al livello radice dell'espressione.The expression evaluator handles this cast intelligently and casts to DT_WSTR, not to DT_STR, because it recognizes that the operation is not at the root level of the expression.

    Gli esempi seguenti illustrano gli effetti del cast.The following examples demonstrate the effects of casting.

    Cast di stringhe nelle espressioni di SSISCasting strings in SSIS expressions

  5. Nella prima espressione il cast non è al livello radice dell'espressione.In the first expression, the cast is not at the root level of the expression. L'analizzatore di espressioni gestisce questo cast in modo intelligente ed esegue il cast a DT_WSTR, non a DT_STR.The expression evaluator handles this cast intelligently and casts to DT_WSTR, not to DT_STR. L'espressione restituisce DT_WSTR.The expression returns DT_WSTR.

  6. Nella seconda espressione il cast è al livello radice dell'espressione.In the second expression, the cast is at the root level of the expression. L'espressione restituisce DT_STR.The expression returns DT_STR.

Conversione dati implicitaImplicit Data Conversion

La conversione implicita di un tipo di dati si verifica quando l'analizzatore di espressioni converte automaticamente i dati da un tipo a un altro.An implicit conversion of a data type occurs when the expression evaluator automatically converts the data from one data type to another. Se ad esempio un valore smallint viene confrontato con un valore int, il valore smallint verrà implicitamente convertito in un valore int prima dell'esecuzione del confronto.For example, if a smallint is compared to an int, the smallint is implicitly converted to int before the comparison is performed.

L'analizzatore di espressioni non è in grado di eseguire una conversione implicita dei dati se gli argomenti e gli operandi hanno tipi di dati incompatibili.The expression evaluator cannot perform implicit data conversion when the arguments and operands have incompatible data types. Inoltre, l'analizzatore di espressioni non è in grado di convertire implicitamente alcun valore in un valore booleano.In addition, the expression evaluator cannot implicitly convert any value to a Boolean. Gli argomenti e gli operandi devono essere invece convertiti esplicitamente utilizzando l'operatore cast.Instead, the arguments and operands must be explicitly converted by using the cast operator. Per altre informazioni, vedere Cast (espressione SSIS).For more information, see Cast (SSIS Expression).

Nella figura seguente viene illustrato il tipo di risultato delle conversioni implicite delle operazioni BINARY.The following diagram shows the result type of implicit conversions of BINARY operations. L'intersezione di colonna e riga in questa tabella è il tipo di risultato di un'operazione binaria con operandi di tipo sinistra (Da) e destra (A).The intersection of column and row in this table is the result type of a binary operation with operands of the left (From) and right (To) types.

Conversione tra tipi di dati di tipi di dati impliciteImplicit data type conversion between data types

L'intersezione tra un valore intero con segno e un valore intero senza segno è un valore intero con segno potenzialmente maggiore di entrambi gli argomenti.The intersection of a signed and an unsigned integer is a signed integer that is potentially larger than either argument.

Gli operatori confrontano stringhe, date, valori booleani e altri tipi di dati.Operators compare strings, dates, Booleans, and other data types. Prima che un operatore confronti due valori, l'analizzatore di espressioni esegue alcune conversioni implicite.Before an operator compares two values, the expression evaluator performs certain implicit conversions. L'analizzatore di espressioni converte sempre i valori letterali stringa nel tipo di dati DT_WSTR e i valori letterali booleani nel tipo di dati DT_BOOL.The expression evaluator always converts string literals to the DT_WSTR data type and converts Boolean literals to the DT_BOOL data type. L'analizzatore di espressioni interpreta come stringhe tutti i valori racchiusi tra virgolette.The expression evaluator interprets all values enclosed in quotation marks as strings. I valori letterali numerici vengono convertiti in uno dei tipi di dati numeric di Integration ServicesIntegration Services .Numeric literals are converted to one of the numeric Integration ServicesIntegration Services data types.

Nota

I valori booleani sono valori logici, non numeri.Boolean values are logical values, not numbers. Benché possano essere visualizzati come numeri in alcuni ambienti, i valori booleani non vengono archiviati come numeri e i vari linguaggi di programmazione, così come i metodi di .NET Framework, li rappresentano come valori numerici in modi diversi.Although Boolean values may be displayed as numbers in some environments, they are not stored as numbers, and various programming languages represent Boolean values as numeric values differently, as do the .NET Framework methods.

Le funzioni di conversione disponibili in Visual Basic, ad esempio, convertono True in -1, mentre il metodo System.Convert.ToInt32 di .NET Framework converte True in +1.For example, the conversion functions available in Visual Basic convert True to -1; however, the System.Convert.ToInt32 method in the .NET Framework converts True to +1. Il linguaggio delle espressioni di Integration ServicesIntegration Services converte True in -1.The Integration ServicesIntegration Services Expression Language converts True to -1.

Per evitare errori o risultati imprevisti, è consigliabile non scrivere codice basato su particolari valori numerici per True e False.To avoid errors or unexpected results, you should not write code that relies on particular numeric values for True and False. Quando possibile, è consigliabile limitare l'utilizzo delle variabili booleane ai valori logici per i quali sono progettate.Wherever possible, you should restrict usage of Boolean variables to the logical values for which they are designed.

Per altre informazioni, vedere gli argomenti seguenti:For more information, see the following topics:

  • == (uguale) (espressione SSIS)== (Equal) (SSIS Expression)

  • [!= (diverso da) (espressione SSIS)](../../integration-services/expressions/unequal-ssis-expression.md)(../../integration-services/expressions/unequal-ssis-expression.md)

  • > (maggiore di) (espressione SSIS)> (Greater Than) (SSIS Expression)

  • < (minore di) (espressione SSIS)< (Less Than) (SSIS Expression)

  • >= (maggiore o uguale a) (espressione SSIS)>= (Greater Than or Equal To) (SSIS Expression)

  • <= (minore o uguale a) (espressione SSIS)<= (Less Than or Equal To) (SSIS Expression)

    Una funzione che utilizza un singolo argomento restituisce un risultato con lo stesso tipo di dati dell'argomento, con le eccezioni seguenti:A function that uses a single argument returns a result with the same data type as the argument, with the following exceptions:

  • Le funzioni DAY, MONTH e YEAR accettano un valore date e restituiscono un Integer (DT_I4).DAY, MONTH, and YEAR accept a date and return an integer (DT_I4) result.

  • La funzione ISNULL accetta un'espressione con qualsiasi tipo di dati SSISSSIS e restituisce un valore booleano (DT_BOOL).ISNULL accepts an expression of any SSISSSIS data type and returns a Boolean (DT_BOOL) result.

  • Le funzioni SQUARE e SQRT accettano un'espressione numerica e restituiscono un valore numerico non integrale (DT_R8).SQUARE and SQRT accept a numeric expression and return a non-integral numeric (DT_R8) result.

    Se gli argomenti sono dello stesso tipo, anche il risultato sarà di tale tipo.If the arguments have the same data type, the result is of that type. L'unica eccezione è costituita dal risultato di un'operazione binaria su due valori con tipo di dati DT_DECIMAL, che restituisce un risultato con tipo di dati DT_NUMERIC.The only exception is the result of a binary operation on two values with the DT_DECIMAL data type, which returns a result with the DT_NUMERIC data type.

Requisiti per i dati utilizzati nelle espressioniRequirements for Data Used in Expressions

L'analizzatore di espressioni supporta tutti i tipi di dati di Integration ServicesIntegration Services .The expression evaluator supports all Integration ServicesIntegration Services data types. A seconda dell'operazione o della funzione, operandi e argomenti possono tuttavia richiedere tipi di dati specifici.However, depending on the operation or the function, the operands and arguments require certain data types. L'analizzatore di espressioni impone i seguenti requisiti sul tipo di dati per i dati utilizzati nelle espressioni:The expression evaluator imposes the following data type requirements on data used in expressions:

  • Gli operandi usati nelle operazioni logiche devono restituire valori booleani.Operands used in logical operations must evaluate to a Boolean. Ad esempio, ColumnA > 1&&ColumnB < 2.For example, ColumnA > 1&&ColumnB < 2.

  • Gli operandi usati nelle operazioni matematiche devono restituire valori numerici.Operands used in mathematical operations must evaluate to a numeric value. Ad esempio, 23,75 * 4.For example, 23.75 * 4.

  • Gli operandi utilizzati nelle operazioni di confronto, ad esempio operazioni logiche e di uguaglianza, devono restituire tipi di dati compatibili.Operands used in comparison operations, such as logical and equality operations, must evaluate to compatible data types.

    Ad esempio, in una delle espressioni nell'esempio seguente viene utilizzato il tipo di dati DT_DBTIMESTAMPOFFSET:For example, one of the expressions in the following example uses the DT_DBTIMESTAMPOFFSET data type:

    (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"

    Il sistema converte l'espressione (DT_DBDATE)"1999-10-12"nel tipo di dati DT_DBTIMESTAMPOFFSET.The system converts the expression, (DT_DBDATE)"1999-10-12", to DT_DBTIMESTAMPOFFSET. L'esempio restituisce TRUE in quanto l'espressione convertita diventa "1999-10-12 00:00:00.000 +00:00", diverso dal valore dell'altra espressione, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".The example evaluates to TRUE because the converted expression becomes "1999-10-12 00:00:00.000 +00:00", which is not equal to the value of the other expression, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".

  • Gli argomenti passati a funzioni matematiche devono restituire tipi di dati numeric.Arguments passed to mathematical functions must evaluate to a numeric data type. A seconda della funzione o dell'operazione può essere necessario un tipo di dati numeric specifico.Depending on the function or operation, a specific numeric data type may be required. La funzione HEX richiede ad esempio un intero con o senza segno.For example, the HEX function requires a signed or unsigned integer.

  • Gli argomenti passati alle funzioni per i valori stringa devono restituire il tipo di dati character DT_STR o DT_WSTR.Arguments passed to string functions must evaluate to a character data type: DT_STR or DT_WSTR. Ad esempio, UPPER("flower").For example, UPPER("flower"). Alcune funzioni per i valori stringa, ad esempio SUBSTRING, richiedono argomenti Integer aggiuntivi che indicano la posizione iniziale e la lunghezza della stringa.Some string functions, such as SUBSTRING, require additional integer arguments for the start position and the length of the string.

  • Gli argomenti passati alle funzioni di data e ora devono restituire una data valida.Arguments passed to date and time functions must evaluate to a valid date. Ad esempio, DAY(GETDATE()).For example, DAY(GETDATE()). Funzioni quali DATEADD richiedono un argomento Integer aggiuntivo che indica il numero di giorni che la funzione deve aggiungere alla data specificata.Some functions, such as DATEADD, require an additional integer argument for the number of days the function adds to a date.

    Nelle operazioni che combinano un Integer a 8 byte senza segno e un Integer con segno è necessario un cast esplicito per identificare il formato del risultato.Operations that combine an unsigned eight-byte integer and a signed integer require an explicit cast to clarify the result format. Per altre informazioni, vedere Cast (espressione SSIS).For more information, see Cast (SSIS Expression).

    I risultati di molte operazioni e funzioni hanno un tipo di dati predeterminato,Results of many operations and functions have predetermined data types. che può essere il tipo di dati dell'argomento o il tipo di dati a cui l'analizzatore di espressioni esegue il cast del risultato.This can be the data type of the argument or the data type to which the expression evaluator casts the result. Il risultato di un operatore OR logico (||), ad esempio, è sempre un valore booleano, mentre il risultato della funzione ABS è il tipo di dati numeric dell'argomento e il risultato di una moltiplicazione è il più piccolo tipo di dati numeric in grado di contenere il risultato senza causare una perdita di dati.For example, the result of a logical OR operator (||) is always a Boolean, the result of the ABS function is the numeric data type of the argument, and the result of multiplication is the smallest numeric data type that can hold the result without loss. Per altre informazioni sui tipi di dati dei risultati, vedere Operatori (espressione SSIS) e Funzioni (espressione SSIS).For more information about the data types of results, see Operators (SSIS Expression) and Functions (SSIS Expression).

Utilizzo di un'espressione in un componente flusso di datiUse an Expression in a Data Flow Component