SQL Server Integration Services-Datentypen in Ausdrücken
Die Ausdrucksauswertung verwendet Integration Services-Datentypen. Wenn Daten an einen Datenfluss in einem Integration Services-Paket weitergegeben werden, konvertiert das Datenflussmodul alle Spaltendaten in einen Integration Services-Datentyp, und die von einem Ausdruck verwendeten Spaltendaten weisen bereits einen Integration Services-Datentyp auf. Ausdrücke, die in den Transformationen für bedingtes Teilen und für abgeleitete Spalten verwendet werden, können auf Spalten verweisen, weil sie Teil eines Datenflusses mit Spaltendaten sind.
In Ausdrücken können außerdem Variablen verwendet werden. Variablen weisen einen Variant-Datentyp auf, und die Ausdrucksauswertung konvertiert den Datentyp einer Variablen von einem Variant-Untertyp in einen Integration Services-Datentyp, bevor der Ausdruck ausgewertet wird. Für Variablen kann nur eine Teilmenge der Integration Services-Datentypen verwendet werden. Beispielsweise ist für eine Variable kein BLOB-Datentyp (Binary Large Object Block) zulässig.
Weitere Informationen zu Integration Services-Datentypen und zum Zuordnen von Variant-Datentypen zu Integration Services-Datentypen finden Sie unter Integration Services-Datentypen.
Darüber hinaus können Ausdrücke numerische und boolesche Literale sowie Zeichenfolgenliterale einschließen. Die Ausdrucksauswertung konvertiert Zeichenfolgenliterale stets in den DT_WSTR-Datentyp und boolesche Literale in den DT_BOOL-Datentyp. Alle in Anführungszeichen eingeschlossenen Werte werden von der Ausdrucksauswertung als Zeichenfolgen interpretiert. Numerische Literale werden in einen der numerischen Integration Services-Datentypen konvertiert. Weitere Informationen zum Konvertieren von numerischen Literalen in numerische Integration Services-Datentypen finden Sie unter Literale (SSIS).
Hinweis |
---|
Boolesche Werte sind keine Zahlen, sondern logische Werte. Obwohl einige Umgebungen boolesche Werte als Zahlenwerte darstellen, werden Sie nicht als Zahlen gespeichert. Je nach Programmiersprache werden boolesche Werte als unterschiedliche Zahlenwerte dargestellt. Dies gilt auch für .NET Framework-Methoden. Beispielsweise konvertieren die Konvertierungsfunktionen von Visual Basic den Wert True in den Zahlenwert "-1". Die System.Convert.ToInt32-Methode von .NET Framework konvertiert True jedoch in den Zahlenwert "+1". Die Integration Services-Ausdruckssprache konvertiert True in den Zahlenwert "-1". Um Fehler oder unerwartete Ergebnisse zu vermeiden, sollten Sie keinen Code erstellen, der von bestimmten numerischen Werten für True und False abhängig ist. Nach Möglichkeit sollten bei booleschen Variablen nur die für sie vorgesehenen logischen Werte verwendet werden. |
Voraussetzungen für die Verwendung von Daten in Ausdrücken
Die Ausdrucksauswertung unterstützt alle Integration Services-Datentypen. Je nach Operation oder Funktion sind jedoch für die Operanden und Argumente bestimmte Datentypen erforderlich. Die Ausdrucksauswertung erzwingt die folgenden Datentypanforderungen für Daten, die in Ausdrücken verwendet werden:
Operanden, die in logischen Operationen verwendet werden, müssen zu einem booleschen Wert ausgewertet werden. Beispiel: ColumnA > 1&&ColumnB < 2.
Operanden, die in mathematischen Operationen verwendet werden, müssen zu einem numerischen Wert ausgewertet werden. Beispiel: 23.75 * 4.
In Vergleichsoperationen, z. B. logischen und Gleichheitsoperationen, verwendete Operanden müssen zu kompatiblen Datentypen ausgewertet werden.
In einem der Ausdrücke im folgenden Beispiel wird z. B. der DT_DBTIMESTAMPOFFSET-Datentyp verwendet:
(DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"
Der Ausdruck (DT_DBDATE)"1999-10-12" wird in DT_DBTIMESTAMPOFFSET konvertiert. In diesem Beispiel wird zu TRUE ausgewertet, weil der konvertierte Ausdruck zu "1999-10-12 00:00:00.000 +00:00" wird, was nicht dem Wert des anderen Ausdrucks entspricht, der (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" lautet.
Argumente, die an mathematische Funktionen übergeben werden, müssen zu einem numerischen Datentyp ausgewertet werden. Je nach Funktion oder Operation kann ein bestimmter numerischer Datentyp erforderlich sein. Beispielsweise erfordert die HEX-Funktion eine ganze Zahl mit oder ohne Vorzeichen.
Argumente, die an Zeichenfolgenfunktionen übergeben werden, müssen zu einem Zeichendatentyp ausgewertet werden: DT_STR oder DT_WSTR. Beispiel: UPPER("flower"). Manche Zeichenfolgenfunktionen, wie z. B. SUBSTRING, erfordern zusätzliche ganzzahlige Argumente für die Startposition und die Länge der Zeichenfolge.
Argumente, die an Datums- und Zeitfunktionen übergeben werden, müssen zu einem gültigen Datum ausgewertet werden. Beispielsweise DAY(GETDATE()). Manche Funktionen, wie z. B. DATEADD, erfordern ein zusätzliches ganzzahliges Argument für die Anzahl von Tagen, die von der Funktion zu einem Datum addiert werden.
Für Operationen, bei denen ein integer-Wert ohne Vorzeichen mit der Länge von 8 Byte und ein integer-Wert mit Vorzeichen kombiniert werden, ist zum Klären des Ergebnisformats eine explizite Umwandlung erforderlich. Weitere Informationen finden Sie unter CAST (SSIS-Ausdruck): Konvertieren von SSIS-Datentypen.
Die Ergebnisse vieler Operationen und Funktionen können vordefinierte Datentypen aufweisen. Dies kann der Datentyp des Arguments oder der Datentyp sein, in den die Ausdrucksauswertung das Ergebnis umwandelt. Beispielsweise ist das Ergebnis eines logischen OR-Operators (||) immer ein boolescher Wert, das Ergebnis der ABS-Funktion ist der numerische Datentyp des Arguments, und das Ergebnis einer Multiplikation ist der kleinste numerische Datentyp, der das Ergebnis ohne Verlust speichern kann. Weitere Informationen zu den Datentypen von Ergebnissen finden Sie unter Operatoren (SSIS-Ausdruck) und Zeichenfolgenfunktionen und andere Funktionen (SSIS-Ausdruck).
Externe Ressourcen
Technischer Artikel Spickzettel für SSIS-Ausdrücke auf pragmaticworks.com
Technischer Artikel mit Beispielen für SSIS-Ausdrücke auf social.technet.microsoft.com