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