SSIS中的腳本—表達式
表達式是使用一些元素組合起來產生一個唯一的值。這些元素包括變量,字面值,函數,存儲過程和運算符。一個簡答的表達式是1<2,它的結果是true。雖然表達式是從C語言中衍生出來,但是他們大小寫不明感。
SSIS中很多的任務都支持表達式。所有的任務都支持使用表達式來配置屬性。例如For Loop和Foreach Loop中可以使用表達式來設置循環條件,Derived Column任務可以使用表達式來定義輸出。
動態屬性
SSIS中通過表達式可以動態的執行轉換任務。
右擊任務選擇編輯,打開編輯界面。在左方有一些歸類標簽,點擊這些標簽可以打開一類相關的屬性。每一種任務都會有一個表達式標簽,如圖1

圖1
在這個編輯框中有兩個列,一個是表達式名字,一個是表達式的值。在表達式名字中可以打開一個下拉列表,在這個表中選擇要用的表達式,之后就可以在值這個列中編輯一個表達式值。在編輯表達式值的時候也可以點擊右邊的園形按鈕打開表達式值編輯器。如圖2

圖2
點擊右邊欄中表達式旁邊的加號可以查看所有的表達式。點擊文本框旁邊的圓形按鈕可以打開表達式編輯框,如圖3

圖3
這個編輯器非常強大,左邊框中的樹形結構羅列出要編輯的表達式。在右邊框中的樹形結構羅列了所有可以使用的表達是函數和操作符。點擊一個函數或者操作符的時候在下方Description欄中將會自動展示一些解釋說明。也可以直接點擊想要的表達式或者表達式函數到編輯框中而不是手動鍵入。
在表達式編輯器中設置表達式,注意表達式的值要和表達式相符,例如如果選擇DelayValidation屬性,那么表達式的結果一定要是一個布爾類型。設置好之后可以店家Evaluate Expression來驗證,如果不符則會彈出錯誤提示。例如我們輸入字母a則會得到如圖4的錯誤提示。

圖4
任務中的表達式
在任務中也可以使用表達式。最典型的就是Derived Column任務。下面我們看看在Derived Column中我們如何使用。新建一個包,在Control Flow中拖放一個Data Flow Task,雙擊進入Data Flow,在其中拖放一個OLE DB數據源,選擇視圖[HumanResources].[vEmployee]。在Columns標簽中只選擇FirstName,MiddleName,LastName三個列。
添加一個Derived Column任務,把它和數據源連接起來。雙擊Derived Column打開編輯器,可以看到如圖5的界面,這個界面可表達式編輯器非常的相似。不同的地方在表達式邊界框中,這里不是一個文本框,而是一個用來編輯輸出列的可以編輯的表格。

圖5
在第一列中輸入FullName,在Derived Column列中選擇<add as new column>,最后在Expression這一列中輸入如下的表達式:
FirstName + ""+ MiddleName + ""+ LastName
這個表達式非常的簡單,只是將所有名字連接起來作為一個完整的名字,中間是偶那個空格隔開。
點擊OK保存,關閉表達式編輯界面。添加一個平面文件或者是Excel格式的數據目的,把他和Derived Column連接起來。最后運行這個包。這里我們選擇使用Excel格式的數據目的。運行成功之后可以看到如圖6的結果。

圖6
我們會發現FullName這一列中有一些列是空的,這是因為有一些人沒有MiddleName,使得表達式的值有誤,這樣的結果不是我們希望的。我們需要判斷MiddleName的值。打開表達式編輯器重新編輯如下:
FirstName + (ISNULL(MiddleName)? " ": " "+ MiddleName + " ") + LastName
這里使用ISNULL函數判斷然后使用問號表達式來處理MiddleName。
這個函數是從C語言演化而來的。三元表達式和VB中的IIF函數很相似。最后保存關閉編輯器。最后查看Excel文件,這次每一行都都有一個值,如圖7

圖7
新的表達式語言為SSIS提供了強大的功能,使用起來更加便捷。更加詳細的介紹在SQL Server 2008聯機叢書中可以找到。
作者:Tyler Ning
出處:http://www.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯系冬天里的一把火
浙公網安備 33010602011771號