程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Integration Services:變量和表達式

Integration Services:變量和表達式

編輯:關於.NET

變量,作為程序員的我們,是一個多麼熟悉的概念,從開始學習編程的第一天起,就要了解什麼是變量?如何定義一個變量?變量的使用范圍等。現在還有必要在這裡大費口舌來討論“變量”嗎?不錯,我們今天談的變量,也脫離不了這個范疇:如何定義一個變量?如何使用變量?變量的使用范圍等。但是在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 表達式時,非常有用哦。

(二)、變量表達式。

變量表達式的定義同屬性表達式的定義完全相同,選擇變量的“Expressions ”屬性,打開屬性編輯器,進行編輯即可。

(三)、優先約束表達式。

一般在控制流中有多個任務組件,比如有Script 任務,有數據流任務,有SQL腳本任務等,我們有時並不需要這些任務全部都要執行,而是需要根據前面一個任務的執行結果,動態地決定後面的任務是否執行,這就需要用到優先約束表達式。如圖:

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

(四)、循環容。

“For 循環”是一個容器組件,它可以讓某些組件在此容器中,重復運行指定的次數。在這個容器中,我們要定義初值、定義表達式、定義賦值語句,如圖:

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved