Condividi tramite


Espressioni avanzate in Integration Services

In questa sezione vengono forniti esempi di alcune espressioni avanzate, in cui sono combinati più operatori e funzioni. Le espressioni utilizzate nei vincoli di precedenza o nella trasformazione Suddivisione condizionale devono restituire un valore booleano. Tale restrizione non si applica tuttavia alle espressioni utilizzate in espressioni di proprietà e variabili, nella trasformazione Colonna derivata o nel contenitore Ciclo For.

Nell'esempio seguente viene utilizzato il database AdventureWorks2008R2. Per ogni esempio viene indicata la tabella utilizzata.

Espressioni booleane

  • Nell'esempio viene utilizzata la tabella Product. Tramite l'espressione viene valutata la voce relativa al mese nella colonna SellStartDate e viene restituito TRUE se il mese è giugno o un mese successivo.

    DATEPART("mm",SellStartDate) > 6
    
  • Nell'esempio viene utilizzata la tabella Product. Tramite l'espressione viene valutato il risultato arrotondato della divisione della colonna ListPrice per la colonna StandardCost, e viene restituito TRUE se il risultato è maggiore di 1,5.

    ROUND(ListPrice / StandardCost,2) > 1.50
    
  • Nell'esempio viene utilizzata la tabella Product. Tramite l'espressione viene restituito TRUE se per tutte e tre le operazioni viene restituito TRUE. Se nella colonna Size e nella variabile BikeSize sono presenti tipi di dati incompatibili, per l'espressione è necessario un cast esplicito, come mostrato nel secondo esempio. Nel cast a DT_WSTR è inclusa la lunghezza della stringa.

    MakeFlag ==  TRUE && FinishedGoodsFlag == TRUE && Size != @BikeSize
    MakeFlag ==  TRUE && FinishedGoodsFlag == TRUE  && Size != (DT_WSTR,10)@BikeSize
    
  • Nell'esempio viene utilizzata la tabella CurrencyRate. L'espressione consente di confrontare valori in tabelle e variabili. Viene restituito TRUE se le voci delle colonne FromCurrencyCode o ToCurrencyCode sono uguali ai valori della variabile e se il valore in AverageRate è maggiore del valore in EndOfDayRate.

    (FromCurrencyCode == @FromCur || ToCurrencyCode == @ToCur) && AverageRate > EndOfDayRate
    
  • Nell'esempio viene utilizzata la tabella Currency. Tramite l'espressione viene restituito TRUE se il primo carattere della colonna Name non è a o A.

    SUBSTRING(UPPER(Name),1,1) != "A"
    

    Tramite l'espressione seguente vengono restituiti gli stessi risultati ma con maggiore efficienza, perché viene convertito in maiuscolo un solo carattere.

    UPPER(SUBSTRING(Name,1,1)) != "A"
    

Espressioni non booleane

Le espressioni non booleane vengono utilizzate nella trasformazione Colonna derivata, nelle espressioni di proprietà e nel contenitore Ciclo For.

  • Nell'esempio viene utilizzata la tabella Person. L'espressione consente di rimuovere gli spazi iniziali e finali dalle colonne FirstName, MiddleName e LastName. Viene estratta la prima lettera della colonna MiddleName e, se non è Null, vengono concatenati l'iniziale del secondo nome con i valori in FirstName e LastName e vengono inseriti gli spazi appropriati tra i valori.

    TRIM(FirstName) + " " + (!ISNULL(MiddleName) ? SUBSTRING(MiddleName,1,1) + " " : "") + TRIM(LastName)
    
  • Nell'esempio viene utilizzata la tabella Person. L'espressione consente di convalidare le voci nella colonna Title. Viene restituita una voce Title o una stringa vuota.

    (Title == "Sr." || Title == "Ms." || Title == "Sra." || Title == "Mr.") ? Title : ""
    
  • Nell'esempio viene utilizzata la tabella Product. L'espressione consente di convertire in maiuscolo il primo carattere nella colonna Color e in minuscolo i caratteri rimanenti.

    UPPER(SUBSTRING(Color,1,1)) + LOWER(SUBSTRING(Color,2,15))
    
  • Nell'esempio viene utilizzata la tabella Product. Tramite l'espressione viene calcolato il numero dei mesi per cui un determinato prodotto è rimasto in vendita e viene restituita la stringa "Unknown" se nella colonna SellStartDate o nella colonna SellEndDate è presente NULL.

    !(ISNULL(SellStartDate)) && !(ISNULL(SellEndDate)) ? (DT_WSTR,2)DATEDIFF("mm",SellStartDate,SellEndDate) : "Unknown"
    
  • Nell'esempio viene utilizzata la tabella Product. Tramite l'espressione viene calcolato il margine di profitto sulla colonna StandardCost e il risultato viene arrotondato alla precisione 2. Il risultato viene presentato come percentuale.

    ROUND(ListPrice / StandardCost,2) * 100
    

Risorse esterne

Articolo tecnico relativo al foglio d'aiuto per le espressioni SSIS, in pragmaticworks.com