Tipi di dati nelle espressioni di Integration Services
L'analizzatore di espressioni utilizza i tipi di dati di Integration Services. La prima volta che i dati entrano nel flusso di dati di un pacchetto di Integration Services il motore del flusso di dati converte i dati di tutte le colonne in un tipo di dati di Integration Services, mentre i dati delle colonne utilizzate da un'espressione hanno già un tipo di dati di Integration Services. 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.
Nelle espressioni è possibile utilizzare anche variabili. 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 Services. Per le variabili è possibile utilizzare solo un subset dei tipi di dati di Integration Services. Per una variabile non è ad esempio possibile utilizzare un tipo di dati BLOB (Binary Large Object).
Per ulteriori informazioni sui tipi di dati di Integration Services e sul mapping dei tipi di dati Variant ai tipi di dati di Integration Services, vedere Tipi di dati di Integration Services.
Le espressioni possono includere anche stringhe, valori booleani e valori letterali numerici. 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. L'analizzatore di espressioni interpreta come stringhe tutti i valori racchiusi tra virgolette. I valori letterali numerici vengono convertiti in uno dei tipi di dati numeric di Integration Services. Per ulteriori informazioni sulla conversione di valori letterali numerici in tipi di dati numeric di Integration Services, vedere Valori letterali (SSIS).
[!NOTA]
I valori booleani sono valori logici, non numeri. 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.
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. Il linguaggio delle espressioni di Integration Services converte True in -1.
Per evitare errori o risultati imprevisti, è consigliabile non scrivere codice basato su particolari valori numerici per True e False. Quando possibile, è consigliabile limitare l'utilizzo delle variabili booleane ai valori logici per i quali sono progettate.
Requisiti per i dati utilizzati nelle espressioni
L'analizzatore di espressioni supporta tutti i tipi di dati di Integration Services. A seconda dell'operazione o della funzione, operandi e argomenti possono tuttavia richiedere tipi di dati specifici. L'analizzatore di espressioni impone i seguenti requisiti sul tipo di dati per i dati utilizzati nelle espressioni:
Gli operandi utilizzati nelle operazioni logiche devono restituire valori booleani. Ad esempio, ColumnA > 1&&ColumnB < 2.
Gli operandi utilizzati nelle operazioni matematiche devono restituire valori numerici. Ad esempio, 23,75 * 4.
Gli operandi utilizzati nelle operazioni di confronto, ad esempio operazioni logiche e di uguaglianza, devono restituire tipi di dati compatibili.
Ad esempio, in una delle espressioni nell'esempio seguente viene utilizzato il tipo di dati DT_DBTIMESTAMPOFFSET:
(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. 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".
Gli argomenti passati a funzioni matematiche devono restituire tipi di dati numeric. A seconda della funzione o dell'operazione può essere necessario un tipo di dati numeric specifico. La funzione HEX richiede ad esempio un valore integer con o senza segno.
Gli argomenti passati alle funzioni per i valori stringa devono restituire il tipo di dati character DT_STR o DT_WSTR. Ad esempio, 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.
Gli argomenti passati alle funzioni di data e ora devono restituire una data valida. Ad esempio, DAY(GETDATE()). Funzioni quali DATEADD richiedono un argomento integer aggiuntivo che indica il numero di giorni che la funzione deve aggiungere alla data specificata.
Nelle operazioni che combinano un valore integer a 8 byte senza segno e un valore integer con segno è necessario un cast esplicito per identificare il formato del risultato. Per ulteriori informazioni, vedere Cast (SSIS).
I risultati di molte operazioni e funzioni hanno un tipo di dati predeterminato, 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. 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. Per ulteriori informazioni sui tipi di dati dei risultati, vedere Operatori (SSIS) e Funzioni (SSIS).