Integration Services 學習 (2)

來源:互聯網
上載者:User

變數和運算式

變數,作為程式員的我們,是一個多麼熟悉的概念,從開始學習編程的第一天起,就要瞭解什麼是變數?如何定義一個變數?變數的使用範圍等。現在還有必要在這裡大費口舌來討論“變數”嗎?不錯,我們今天談的變數,也脫離不了這個範疇:如何定義一個變數?如何使用變數?變數的使用範圍等。但是在ETL的發展過程中,從以前Sql Server 97、Sql Server 2000的DTS到後來的Sql server Integration Services 2005 ,再到現在的Sql Server Integration Services 2008,變數也發生了巨大的變化,其作用也變得越來越重要了。SSIS 包中各組件原本是想互獨立,彼此分割的,就需要通過變數來進行資訊傳遞與交流。就象生活在這座城市中的我們,回家同居一小區,出門同乘一班車,但是老死不相往來,每日相逢不相識,彼此從不溝通,從不交流。現在突然來了一位美麗的使者(Variable),挨門挨戶地傳遞資訊,把大家凝聚在一起,彼此的溝通和交流多起來了,從此這個小區就變得熱鬧起來,相互間和諧多了。

  Integration Services 中的變數,同其它程式設計語言中的變數非常相似----它們都是用於臨時儲存資料。但是也有一些區別:Integration Services 變數,它還是一個對象,有自已的屬性(property),有自已的響應事件。下面我們就看看如何定義變數。

  開啟Integration Services Solution ,開啟菜單SSIS(S)---變數(S),就會彈出的視窗。


 

  從這個視窗中,我們可以明白變數以下幾方面的情況:

  (1)、變數的分類,在Integration Services 中,變數有兩種類型:系統變數和使用者自訂變數。其中系統變數,比如:TaskID,TaskName,CreateName,CreateDate等,提供包運行時的一些基本屬性,可供包中的組件或者代碼使用。這些變數一般是唯讀,在啟動並執行過程中,根據包的運行環境預設產生,不可以修改。而自訂變數呢?兩種情況都可以定義了:唯讀、讀寫。

  (2)、變數的範圍。有基於包的全域變數,也有基於某一組件的局部變數。這與以前的DTS有較大的差異,以前DTS包中的變數,都是基於包的全域變數。

  (3)、變數的名稱、變數的資料類型、預設值等與其它程式設計語言沒有什麼差異,在此就不多說了。

  (4)、Raise Change Event 。這是Integration Services 的一個新屬性。它是一個Bool 值,如果其值為True,每當變數的值發生改變,VariableValueChangedEvent 將會響應,否則,這個事件將不會響應。(SSIS中的事件,以後會講到,這裡暫不深入).

  除了上面提到的這些屬性外,變數還有一個重要的屬性--變數的可繼承性。前面提到變數有全域變數與局部變數,而局部變數是針對某一個組件可見的變數,但是Integration Services 中的組件是分層的,即有祖先級組件,也有子孫級組件,那麼子孫組件就會繼承祖先組件的變數,可以引用,可以修改,也可以觸發變數VariableValueChangedEvent 事件。

 

二、運算式。

  前面講述了表變數的定義、變數的命名空間、變數的作用範圍等,但是卻沒有提及如何使用變數。這就是我們這一節要介紹的內容--運算式。

  “在SSIS解決方案中,對於運算式的強大功能怎麼表述都不過分。在SSIS中,我最喜歡的功能就是運算式”--Jamie Thomson

  正如Jamie 所言,運算式的功能在SSIS簡直是太強大了,組件的屬性、變數、優先順序約束、For/Foreach迴圈容器等,都可以用運算式進行設定。從而使用包變得更加強大、靈活。下面我們將講一講常見的幾種運算式的應用。

  (一)、屬性運算式。

  在Integration Services 中,大多數組件都有Expressions 這個屬性,


 

   Expressions 就是為組件定義運算式的屬性,點擊“...”按鈕,開啟“屬性運算式編輯器”對話方塊,

 

我們可以簡單地比較一下,一個文字檔連線物件,基本上大多數屬性都可以通過運算式來定義,這就是它的強大的之處。運算式的定義,也非常方便,有一個功能全面的“運算式產生器”視窗,

 

 

  這個視窗有四個地區,左上方為“變數”地區,包含了全域變數和該對象可見的局部變數。右上方為“函數”和“運算子”地區,中間為運算式編輯地區,下面為運算式結果顯示區,每當一個運算式定義完成,我們為了驗證運算式定義是否正確,點擊“計算運算式”按鈕,就可以類比計算出運算式的結果。請大家別小看了這個按鈕,在Debug 運算式時,非常有用哦。

  (二)、Variant 運算式。

  Variant 運算式的定義同屬性運算式的定義完全相同,選擇變數的“Expressions ”屬性,開啟屬性編輯器,進行編輯即可。

  (三)、優先順序條件約束運算式。

  一般在控制流程中有多個工作群組件,比如有Script 任務,有資料流程工作,有SQL指令碼任務等,我們有時並不需要這些任務全部都要執行,而是需要根據前面一個任務的執行結果,動態地決定後面的任務是否執行,這就需要用到優先順序條件約束運算式。

 

 

  優先順序條件約束控制著包的工作流程,它會判斷包的約束是否滿足,然後再按照約束條件來選擇包是繼續運行,還是停止運行。在以前的DTS中,優先順序條件約束僅限於前面的任務是“成功”、“失敗”、“完成”這三種狀態,而現在除了以上三種狀態外,還多了一個“運算式和約束”,即我們可以通過定義運算式來定義約束,比如所示,如果我們需要定義當錯誤數量超過5次以後,包才失敗,停止運行。這就要用到運算式約束了。

  (四)、迴圈容。

  “For 迴圈”是一個容器組件,它可以讓某些組件在此容器中,重複運行指定的次數。在這個容器中,我們要定義初值、定義運算式、定義指派陳述式,


 

  

  常用的運算式應用,就是以上這些了,當然還有其它一些類型的運算式定義,我們就不一一列舉了,使用方法都大同小異,只要撐握了前面幾種,這些定義也就一目瞭然了。

  今天我們講述了兩個內容:變數和運算式,這兩方面的內容,在SSIS包中扮演了非常重要的角色,只要我們充分、靈活地運用,它可以讓包更有彈性,更靈活,更加有生命力。如果大家在以後的工作中遇到了,仔細琢磨琢磨,一定不會讓你失望的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.