Integration Services Gegevenstypen in Expressies

van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

De expressie-evaluator maakt gebruik van Integration Services-gegevenstypen. Wanneer gegevens voor het eerst een gegevensstroom in een Integration Services-pakket binnenkomen, converteert de gegevensstroomengine alle kolomgegevens naar een Integration Services-gegevenstype, en de kolomgegevens die een expressie gebruikt, hebben reeds een Integration Services-gegevenstype. Expressies die worden gebruikt in de voorwaardelijke splitsing en de afgeleide kolomtransformaties kunnen verwijzen naar kolommen omdat ze deel uitmaken van een gegevensstroom die kolomgegevens bevat.

Variables

Expressies kunnen ook variabelen gebruiken. Variabelen hebben een gegevenstype Variant en de expressie-evaluator converteert het gegevenstype van een variabele van een variantsubtype naar een Integration Services-gegevenstype voordat de expressie wordt geëvalueerd. Variabelen kunnen alleen een subset van de Integration Services-gegevenstypen gebruiken. Een variabele kan bijvoorbeeld geen BLOB-gegevenstype (Binary Large Object Block) gebruiken.

Zie Integration Services Gegevenstypen voor meer informatie over Integration Services-gegevenstypen en de toewijzing van variantgegevenstypen aan Integration Services-gegevenstypen.

Literals

Daarnaast kunnen expressies tekenreeksen, Booleaanse waarden en numerieke letterlijke waarden bevatten. Zie Literals (SSIS) voor meer informatie over het converteren van numerieke letterlijke waarden naar numerieke gegevenstypen van Integration Services.

Tekenreeksen

U kunt DT_STR of DT_WSTR gebruiken als het retourtype van een expressie. In een expressie wordt echter alleen DT_WSTR ondersteund en DT_STR waarden worden geconverteerd naar DT_WSTR waarden. Dit gedrag heeft verschillende gevolgen wanneer u een expressie schrijft.

  • Gebruik in een expressie NULL(DT_WSTR, ...) in plaats van NULL(DT_STR, ...). Zie NULL (SSIS Expression) voor meer informatie over deze functie.

  • In een expressie kunt u alleen de functie CAST gebruiken om een waarde naar het DT_STR-type te casten op het basisniveau van de expressie, dat wil zeggen, wanneer u het uiteindelijke resultaat van de expressie retourneert. Gebruik anders het DT_WSTR type in de expressie.

Bekijk de expressies in de volgende schermafbeelding.

Tekenreeksgegevenstypen in SSIS-expressies

  1. De eerste expressie wordt zonder fouten uitgevoerd omdat de functie NULL(DT_STR, ...) zich op het hoofdniveau van de expressie bevindt.

  2. De tweede expressie wordt zonder fout uitgevoerd omdat er NULL(DT_WSTR, ...) wordt gebruikt.

  3. De derde expressie genereert een fout omdat deze NULL(DT_STR, ...) in de expressie gebruikt.

  4. De vierde expressie wordt zonder fout uitgevoerd omdat het resultaat van NULL(DT_STR, ...) in de expressie wordt omgezet.

    De expressie-evaluator verwerkt deze cast intelligent en cast naar DT_WSTR, niet naar DT_STR, omdat de bewerking niet op het hoofdniveau van de expressie staat.

In de volgende voorbeelden ziet u de effecten van casten.

Tekenreeksen casten in SSIS-expressies

  1. In de eerste expressie bevindt de cast zich niet op het hoofdniveau van de expressie. De evaluator van de expressie verwerkt de cast op een intelligente manier en cast naar DT_WSTR in plaats van naar DT_STR. De expressie retourneert DT_WSTR.

  2. In de tweede expressie bevindt de cast zich op het hoofdniveau van de expressie. De expressie retourneert DT_STR.

Impliciete gegevensconversie

Een impliciete conversie van een gegevenstype vindt plaats wanneer de expressie-evaluator automatisch de gegevens van het ene gegevenstype naar het andere converteert. Als een smallint bijvoorbeeld wordt vergeleken met een int, wordt de smallint impliciet geconverteerd naar een int voordat de vergelijking wordt uitgevoerd.

De expressie-evaluator kan geen impliciete gegevensconversie uitvoeren wanneer de argumenten en operanden incompatibele gegevenstypen hebben. Bovendien kan de expressie-evaluator geen waarde impliciet converteren naar een Booleaanse waarde. In plaats daarvan moeten de argumenten en operanden expliciet worden geconverteerd met behulp van de cast-operator. Zie Cast (SSIS Expression) voor meer informatie.

In het volgende diagram ziet u het resultaattype van impliciete conversies van BINAIRE bewerkingen. Het snijpunt van kolom en rij in deze tabel is het resultaattype van een binaire bewerking met operanden van de typen links (Van) en rechts (Naar).

Impliciete gegevenstypeconversie tussen gegevenstypen

Het snijpunt van een ondertekend en een niet-ondertekend geheel getal is een ondertekend geheel getal dat mogelijk groter is dan een van beide argumenten.

Operators vergelijken tekenreeksen, datums, Booleaanse waarden en andere gegevenstypen. Voordat een operator twee waarden vergelijkt, voert de expressie-evaluator bepaalde impliciete conversies uit. De expressie-evaluator converteert altijd letterlijke tekenreeksen naar het DT_WSTR gegevenstype en converteert Booleaanse letterlijke waarden naar het DT_BOOL gegevenstype. De expressie-evaluator interpreteert alle waarden tussen aanhalingstekens als tekenreeksen. Numerieke literalen worden geconverteerd naar een van de numerieke gegevens­typen van Integration Services.

Opmerking

Booleaanse waarden zijn logische waarden, niet getallen. Hoewel Booleaanse waarden in sommige omgevingen kunnen worden weergegeven als getallen, worden ze niet opgeslagen als getallen en vertegenwoordigen verschillende programmeertalen Booleaanse waarden als numerieke waarden anders, net als de .NET Framework-methoden.

Bijvoorbeeld, de conversiefuncties die beschikbaar zijn in Visual Basic converteren True naar -1; de methode System.Convert.ToInt32 in .NET Framework converteert True echter naar +1. De Expression Language van Integration Services converteert True naar -1.

Als u fouten of onverwachte resultaten wilt voorkomen, moet u geen code schrijven die afhankelijk is van bepaalde numerieke waarden voor Waar en Onwaar. Waar mogelijk moet u het gebruik van Booleaanse variabelen beperken tot de logische waarden waarvoor ze zijn ontworpen.

Zie de volgende onderwerpen voor meer informatie:

Een functie die gebruikmaakt van één argument retourneert een resultaat met hetzelfde gegevenstype als het argument, met de volgende uitzonderingen:

  • DAY, MONTH en YEAR accepteren een datum en retourneren een geheel getalresultaat (DT_I4).

  • ISNULL accepteert een expressie van een SSIS-gegevenstype en retourneert een Booleaanse (DT_BOOL) resultaat.

  • SQUARE en SQRT accepteren een numerieke expressie en retourneren een niet-integraal numeriek resultaat (DT_R8).

Als de argumenten hetzelfde gegevenstype hebben, is het resultaat van dat type. De enige uitzondering is het resultaat van een binaire bewerking op twee waarden met het DT_DECIMAL gegevenstype, dat een resultaat retourneert met het DT_NUMERIC gegevenstype.

Vereisten voor gegevens die worden gebruikt in expressies

De expressie-evaluator ondersteunt alle Integration Services-gegevenstypen. Afhankelijk van de bewerking of functie zijn voor de operanden en argumenten echter bepaalde gegevenstypen vereist. De expressie-evaluator legt de volgende vereisten voor gegevenstypen op die worden gebruikt in expressies:

  • Operanden die worden gebruikt in logische bewerkingen moeten worden geëvalueerd naar een Booleaanse waarde. Bijvoorbeeld ColumnA > 1&&&&ColumnB < 2.

  • Operanden die in wiskundige bewerkingen worden gebruikt, moeten een numerieke waarde opleveren. Bijvoorbeeld 23,75 * 4.

  • Operanden die worden gebruikt in vergelijkingsbewerkingen, zoals logische bewerkingen en gelijkheidsbewerkingen, moeten evalueren naar compatibele gegevenstypen.

    Een van de expressies in het volgende voorbeeld gebruikt bijvoorbeeld het gegevenstype DT_DBTIMESTAMPOFFSET:

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

    Het systeem converteert de expressie (DT_DBDATE)"1999-10-12"naar DT_DBTIMESTAMPOFFSET. Het voorbeeld resulteert in WAAR omdat de geconverteerde expressie '1999-10-12 00:00:00.000 +00:00' wordt, wat niet gelijk is aan de waarde van de andere expressie, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".

  • Argumenten die worden doorgegeven aan wiskundige functies, moeten worden geëvalueerd naar een numeriek gegevenstype. Afhankelijk van de functie of bewerking is mogelijk een specifiek numeriek gegevenstype vereist. De HEX-functie vereist bijvoorbeeld een ondertekend of niet-ondertekend geheel getal.

  • Argumenten die worden doorgegeven aan tekenreeksfuncties moeten worden geëvalueerd naar een gegevenstype teken: DT_STR of DT_WSTR. Bijvoorbeeld UPPER("bloem"). Voor sommige tekenreeksfuncties, zoals SUBSTRING, zijn extra gehele getallen vereist voor de beginpositie en de lengte van de tekenreeks.

  • Argumenten die aan datum- en tijdfuncties worden doorgegeven, moeten evalueren tot een geldige datum. Bijvoorbeeld DAY(GETDATE()). Voor sommige functies, zoals DATEADD, is een extra geheel getal vereist dat het aantal dagen aangeeft dat de functie aan een datum toevoegt.

Bewerkingen die een ongetekend acht-byte-geheel getal combineren met een ondertekend geheel getal vereisen een expliciete cast om het resultaatformaat te verduidelijken. Zie Cast (SSIS Expression) voor meer informatie.

Resultaten van veel bewerkingen en functies hebben vooraf bepaalde gegevenstypen. Dit kan het gegevenstype van het argument zijn of het gegevenstype waarnaar de expressie-evaluator het resultaat cast. Het resultaat van een logische OR-operator (|||) is bijvoorbeeld altijd een Booleaanse waarde, het resultaat van de functie ABS is het numerieke gegevenstype van het argument en het resultaat van vermenigvuldiging is het kleinste numerieke gegevenstype dat het resultaat zonder verlies kan bevatten. Zie Operators (SSIS Expression) en Functions (SSIS Expression) voor meer informatie over de gegevenstypen van resultaten.

Een expressie gebruiken in een gegevensstroomonderdeel