在SSIS開發ETL(Extract-Transform-Load),數據抽取、轉換、裝載的過程。我們需要自己定義變數 一、SSIS變數簡介 SSIS(SQL Server Integration Services,SQL Server整合服務)變數分分為兩種,一種是系統變數,一種用戶定義的變數。系 ...
在SSIS開發ETL(Extract-Transform-Load),數據抽取、轉換、裝載的過程。我們需要自己定義變數
一、SSIS變數簡介
SSIS(SQL Server Integration Services,SQL Server整合服務)變數分分為兩種,一種是系統變數,一種用戶定義的變數。系統變數包括有關包、容器、任務或事件處理程式的非常有用的信息。例如,在運行時,MachineName系統變數包含運行包含的電腦的名稱,StartTime變數包開始運行的時間。系統變數是只讀的。在SSIS中,用戶變數是用戶在開發的過程中根據需要申明的變數。用戶變數可以使用在腳本中,在由優先約束、For迴圈容器、派生列轉換和條件性拆分轉換使用的表達式中,以及在更新屬性值的屬性表達式中。
在各種編程語言中申明的變數一般情況下都會有作用範圍的,SSIS變數也不例外,SSIS變數也是有作用範圍的。根據作用範圍分類,變數分為包變數和組件變數。包變數在包任何一個組件中都可以調用,組件變數只能夠在聲明變數的組件中有效。在變數的視窗中可以看到變數的作用域。
可以看到i變數的作用域是整個Package1包,而myconfig變數作用域是數據流任務組件。
二、SSIS用戶變數的聲明、賦值、使用
1、申明變數
申明變數是非常簡單、如果你要申明包變數,只要單擊控制流選項卡,然後在包開發區域空白處單擊右鍵選擇變數命令,或者新建變數按鈕就新建一個變數,輸入名稱,選擇數據類型,賦初值就完成了。
如果要聲明某數據流任務組件使用的變數,只要雙擊該數據流任務組件,在流控制控制選項卡空白的地方單擊右鍵選擇變數命名,在變數視窗中新建一個變數命令,在變數視窗中新建一個變數,這時變數的作用域就是你選擇的流任務組件。
2、賦值
在實際開發中,除了在變數聲明的時候給變數賦值外,還有兩種方式,一種是通過執行SQL任務組件返回值的方式給變數賦值,一種是通過腳本組件來給變數賦值。
在執行SQL任務組件方法是先設置好組件的資料庫連接屬性,然後輸入從資料庫取數據的SQL語句,設置組件返回的結果集為單行。在結果集界面中單擊“新建”,在結果集那一列輸入你剛纔SQL返回列的名稱,在變數名稱列選擇你要賦值的變數
圖中紅色方框中的SQL語句非常簡單,返回單行,結果是1。在圖4中,將返回的result列的一行賦值給用戶變數i。
利用腳本組件賦值變數比較簡單,只需要設置腳本組件的ReadOnlyvariable或者ReadWriteVariable,將變數的名稱設置他們的值(多個變數以逗號分割),它們的區別是前者在腳本組件只能夠讀,或者可以讀寫。然後在腳本組件中通過
Dts.Varables("變數名稱").Value=值
3、變數的使用
變數在ssis中使用的地方很多,筆者介紹兩個典型的應用。
(1) 執行 SQL 任務組件的參數
假定申明瞭一個日期類型變數StartDate,用戶需要通過從某個表中選擇在StartDate日期之前的數據,這個時候需要將StartDate作為參數傳給執行 SQL 任務組件。在執行 SQL 任務組件輸入SQL的地方輸入如下命令語句:
SELECT * FROM TABLE_a WHERE 日期欄位 < ?
然後在參數據映射界面新增映射,在變數名稱列選擇用戶變數StartDate,選擇類型為DATE,在參數名稱列輸入給參數取的名稱。這樣就可以將StartDate變數傳給SQL任務組件的SQL語句了。
(2) 在腳本組件中賦值
可以在腳本組件中通過Dts.Variables("i").Value = 1方式賦值給變數,也可以通過這種方式來使用變數。比如Dts.Variables("other_variable").Value = Dts.Variables("i").Value+1,這個語句是可以在腳本組件中執行的,將i變數加1後賦值給另外一個變數。