31
SQL Server Data Tools 環境介紹 Integration Services專案 封裝設計實作 02

SQL Server Data Tools 環境介紹

Embed Size (px)

Citation preview

Page 1: SQL Server Data Tools 環境介紹

SQL Server Data Tools 環境介紹

Integration Services專案

封裝設計實作

第 02 章

Page 2: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務32

SSIS 2012延續SSIS 2005的開發模式,將SSIS設計師整合在Visual Studio這個怪獸

中內嵌在Visual Studio 2010內的封裝(Package)整合開發環境,讓你可以所見

即所得的方式,快速建立封裝、偵測設定錯誤、互動地呈現執行狀況、提供方便

的除錯環境、設定執行記錄、替專案電子簽章、並提供專案管理的方式來統整相

關的封裝⋯等。

本章將透過簡單的範例介紹設計SSIS封裝的使用者介面「SSIS設計師」,並透過

這個工具設計、建立Integration Services封裝。而部署及管理封裝的部分我們留待

後續章節介紹。

由於SSIS 2012的封裝設計環境與以往的2005/2008/2008 R2差異頗大,若你是以舊

SSIS專案升級上來,將呈現的是「封裝部署模型」之類型專案,與預設的「專案

部署模型」之類型專案有些許差異。本章以新的「專案部署模型」之類型專案為

主,且避免混淆,並未深入討論「封裝部署模型」之類型專案,你可以參照《附

錄D:封裝部署模式的部署與管理》來使用「封裝部署模型」之類型專案。

02-01 Integration Services專案

「SSIS設計師」裝載於SQL Server Data Tools(以下簡稱SSDT)中,它是一個用

來開發商務智慧方案1的整合式環境。SSIS封裝開發工具改以基於WPF重新開發的

Visual Studio 2010為本,並重新命名為SQL Server Data Tools(SSDT),不再採用

以往的開發環境名稱Business Intelligence Development Studio(BIDS)。SSDT就

是在Visual Studio 2010內支援SSIS、Analysis Services、Reporting Services等數種專

案類型的開發與維護。由於SSDT或Visual Studio 2010可以同時設計多種物件,它

泛指整個應用程式或相關物件的開發環境。在Visual Studio 2010環境中除了本身

提供的.NET Framework 4.0、跨螢幕多視窗開發、按住【Ctrl】鍵就可以透過滑鼠

滾輪放大縮小內容⋯等優點外,據微軟SSIS團隊指出,整個SSDT封裝開發環境

有200多處小改善,並增加了許多新功能。以下將分別於各小節介紹。

1. 包括Analysis Services的資料庫、Cube、維度、資料來源、Reporting Services的報表、報表模型,和Integration Services的封裝等。此外,透過Web安裝後,也可以建立開發SQL Server資料庫的專案。

的封裝設計環境與以往的2005/2008/2008 R2

專案升級上來,將呈現的是「封裝部署模型」之類型專案,與預設的「專案

部署模型」之類型專案有些許差異。本章以新的「專案部署模型」之類型專案為

主,且避免混淆,並未深入討論「封裝部署模型」之類型專案,你可以參照《附

:封裝部署模式的部署與管理》來使用「封裝部署模型」之類型專案。

Integration Services

設計師」裝載於SQL Server Data Tools

來開發商務智慧方案1的整合式環境。

主,且避免混淆,並未深入討論「封裝部署模型」之類型專案,你可以參照《附

:封裝部署模式的部署與管理》來使用「封裝部署模型」之類型專案。

Integration Services專案

SQL Server Data Tools(以下簡稱SSDT)中,它是一個用

SSIS封裝開發工具改以基於

SQL Server Data Tools

Business Intelligence Development Studio

Analysis Services

Visual Studio 2010

Page 3: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 33

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

你可經由以下路徑啟動開發環境,「開始」→「所有程式」→「Microsoft SQL

Server 2012」→「SQL Server Data Tools」。或是下列路徑也可開啟開發環境,

「開始」→「所有程式」→「Microsoft Visual Studio 2010」→「Microsoft Visual

Studio 2010」。因為SSDT相關檔案安裝在C:\Program Files (x86)\Microsoft Visual

Studio 10.0\Common7\IDE\目錄下,執行檔為devenv.exe,換句話說,SSDT使用的

執行檔與Visual Studio 2010是相同的。

接著透過主選單上的「檔案」→「新增專案」開啟「新增專案」對話窗。

圖2-1:透過SSDT建立新的SSIS專案

在「新增專案」對話窗提供以下兩種可用的「Integration Services專案」範本。

Integration Services專案■

指定專案名稱、存放目錄路徑以及方案名稱2後,按下「確定」鍵即可建立新

的專案,專案中包含一個空白的封裝,在封裝內可自行加入需要的工作流程。

2. 一個方案可以包含多個不同型態的專案,預設在你鍵入專案名稱時,方案名稱會自動更新,讓其與專案名稱一致。但你可以在方案名稱中另行鍵入不一樣的名字。

圖2-1:透過 建立新的SSIS專案

在「新增專案」對話窗提供以下兩種可用的「Integration Services

指定專案名稱、存放目錄路徑以及方案名稱2後,按下「確定」鍵即可建立新

Page 4: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務34

Integration Services匯入專案精靈■

從專案部署檔案(副檔名為ispac3)或SQL Server執行個體內的Integration

Services目錄匯入封裝定義,以建立本機上的SSIS專案,讓你容易重新建立並

維護已經部署的SSIS專案。如圖2-2所示,透過此精靈。

圖2-2:「Integration Services匯入專案精靈」執行步驟

以圖2-1為例,在「新增專案」對話窗下方勾選「為方案建立目錄」,則會在

「位置」所指定的目錄建立方案檔(副檔名為.sln),以及與「方案名稱」相同

的子目錄。在該目錄內才真正放置專案內各種形式的檔案,其中專案檔的副檔名

為.dtproj。完成上述設定後開啟「Integration Services專案」,在「方案總管」視

窗中可看到你所建立的專案。專案包含「連接管理員」、「SSIS封裝」、「其

他」目錄。依預設,在專案中會建立檔名為Package.dtsx的空白封裝。筆者在此所

稱的「SSIS封裝設計師」,專指在Visual Studio 2010用來設計SSIS封裝的環境,

也就是僅指圖2-3中間圖形設計介面,有控制流程、資料流程⋯索引頁籤以及下方

連接管理員區域的那一塊。

3. 專案部署檔案(副檔名為ispac)是「建置」IS專案時建立的檔案,透過此部署檔可批次上傳專案中的封裝。更多詳細內容可參考《第12章:SSIS部署、管理與執行》說明。

圖2-2:「Integration Services

為例,在「新增專案」對話窗下方勾選「為方案建立目錄」,則會在

Integration Services匯入專案精靈」執行步驟

為例,在「新增專案」對話窗下方勾選「為方案建立目錄」,則會在

「位置」所指定的目錄建立方案檔(副檔名為.sln

的子目錄。在該目錄內才真正放置專案內各種形式的檔案,其中專案檔的副檔名

Integration Services

窗中可看到你所建立的專案。專案包含「連接管理員」、「

Page 5: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 35

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

專案參數

SSIS工具視窗

SSIS設計師 封裝參數 變數按鈕 工具箱按鈕

變數視窗 放大縮小控制 使用者入門視窗

圖2-3:SSIS設計師

新的開發環境與以往略有出入,以下簡單列舉設計環境內於操作介面的改變。

1. SSIS工具箱:此處的工具箱視窗是Integration Service專案提供的視窗,而不是

以往Visual Studio提供的工具箱。封裝所需的工作與資料流程元件都可從此處

拖曳至「SSIS設計師」編輯。

2. 參數:增加了參數的設計概念,且參數可以有專案層級與封裝層級的區別。在

「SSIS設計師」新增一個「參數」頁籤,可單獨設定封裝的參數內容。此外,

「方案總管」視窗內,滑鼠雙擊「Project.params」節點即可開啟專案層級的參

數設定畫面。

3. 變數與工具箱按鈕:設計封裝時,最常使用的

「SSIS工具箱」與「變數」視窗,現在可直

接透過封裝設計環境右上角新增的兩個快速

按鈕,如圖2-4所示,開啟SSIS團隊所建立的

「SSIS工具箱」。圖2-4:以封裝設計環境右上角的「SSIS工具箱」按鈕叫出設計封裝

可用的工具箱視窗

變數視窗

圖2-3:

新的開發環境與以往略有出入,以下簡單列舉設計環境內於操作介面的改變。

:此處的工具箱視窗是

Visual Studio提供的工具箱。封裝所需的工作與資料流程元件都可從此處

放大縮小控制 使用者入門視窗

SSIS設計師

新的開發環境與以往略有出入,以下簡單列舉設計環境內於操作介面的改變。

Integration Service專案提供的視窗,而不是

提供的工具箱。封裝所需的工作與資料流程元件都可從此處

:增加了參數的設計概念,且參數可以有專案層級與封裝層級的區別。在

設計師」新增一個「參數」頁籤,可單獨設定封裝的參數內容。此外,

Page 6: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務36

4. 使用者入門視窗:此視窗的內容可連結至網際網路所提供之線上視訊與範例。

此視窗預設會出現於開發環境的右下角。關閉此視窗後,可再由工具選單的

「SSIS」→「使用者入門」開啟此視窗。

5. 放大縮小控制:在封裝設計環境內的「控制流程」與「資料工作流程」編輯區

域均提供放大縮小工具。你可以按住【Ctrl】鍵,搭配滑鼠滾輪手動調整編輯

區域的大小,或是拖曳此工具的指針,抑或是點選最下方方形按鈕,讓視窗自

動調整最適合的大小。最大可放大5倍,最小可縮小至10%倍,如圖2-5所示。

圖2-5:SSIS設計師提供的放大縮小控制鈕

6. 復原與取消復原:封裝設計環境還可以回復編輯(undo)4,或取消復原

(Redo)。除了透過快捷鍵【Ctrl-Z/Ctrl-Y】或主選單「編輯」下的「復原/取

消復原」選項外,也可以透過工具列上的按鈕「復原/取消復原」多個步驟,如

圖2-6所示,在下拉選單列出多項曾編輯過的操作歷程,你可依需求一次復原

多項異動步驟。

圖2-6:透過工具列上的按鈕,一次復原/取消復原多個封裝設計步驟

4. 此項功能號稱多個SSIS版本以來,排名第一的需求。因為以往若在設計封裝時,一不小心犯了個錯,就需要趕快關掉該設計中的封裝,不要儲存。再重新開啟封裝,否則就需要從版本控管處重

新取得舊版封裝定義,或是重新再做一次了

圖2-5:SSIS設計師提供的放大縮小控制鈕

復原與取消復原:封裝設計環境還可以回復編輯(

)。除了透過快捷鍵【Ctrl-Z/Ctrl-Y

消復原」選項外,也可以透過工具列上的按鈕「復原

所示,在下拉選單列出多項曾編輯過的操作歷程,你可依需求一次復原

設計師提供的放大縮小控制鈕

:封裝設計環境還可以回復編輯(undo)4,或取消復原

Ctrl-Z/Ctrl-Y】或主選單「編輯」下的「復原

消復原」選項外,也可以透過工具列上的按鈕「復原/取消復原」多個步驟,如

所示,在下拉選單列出多項曾編輯過的操作歷程,你可依需求一次復原

Page 7: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 37

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

7. 封裝註解:SSIS 2012對於「設計」環境中的操作也做了許多增強。如圖2-7所

示,使用滑鼠右鍵在空白處點選,選擇快捷選單「新增註解」項目。在撰寫註

解時較為友善,按【Enter】鍵可以直接換行,之前版本在建立註解時,須搭配

鍵盤上的【Ctrl + Enter】按鈕才能換行,單獨按【Enter】鍵會結束編輯,這讓

許多新手誤以為是工具的Bug。

圖2-7:「控制流程」頁籤編輯註解

8. 群組:當設計介面有多個項目時,可使用

「群組5」的功能讓流程較有結構性,且

透過展開 /收合這些「群組」提供在設計

與檢閱時,專注在重要的區塊。以往僅有

在「控制流程」與「事件處理常式」頁籤

內可圈選多個工作設成群組,SSIS 2012

之後,「資料流程」頁籤也可以使用「群

組」功能(如圖2-8所示)在邏輯上歸類元

件的用途。

圖2-8:透過設計環境的「群組」功能,替設計增加可讀性

5. 可利用滑鼠左鍵將部分工作圈選起來,再利用滑鼠右鍵點選被圈選的項目,選擇快捷選單中的「群組」選項即可將部分工作分組。

圖2-7:「控制流程」頁籤編輯註解

:當設計介面有多個項目時,可使用

」的功能讓流程較有結構性,且

收合這些「群組」提供在設計

與檢閱時,專注在重要的區塊。以往僅有

:「控制流程」頁籤編輯註解

:當設計介面有多個項目時,可使用

」的功能讓流程較有結構性,且

收合這些「群組」提供在設計

與檢閱時,專注在重要的區塊。以往僅有

在「控制流程」與「事件處理常式」頁籤

SSIS 2012

之後,「資料流程」頁籤也可以使用「群

所示)在邏輯上歸類元

Page 8: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務38

圖2-8中「取得資料」、「樞紐所需的工作」是筆者自己透過【Ctrl】鍵搭配滑鼠

左鍵選擇不同的元件後,再以滑鼠右鍵選擇快捷選單中的「群組」選項,便可以

方形外框包住這些元件,點選方框右上角的箭頭便能展開/收合群組。

需要注意的是:當Visual Studio的焦點落在「SSIS設計師」時,其上方主選單提供

的選項會與焦點落在其他視窗(如工具箱、方案總管、屬性⋯等視窗)時不同。

在「SSIS設計師」的環境中,你可以透過豐富的圖形化工具,所見即所得的方式

建立資料整合方案,包括用於資料倉儲的擷取、轉換和載入(ETL)封裝。設計

環境中以多索引頁籤的方式呈現不同的編輯內容與執行後的訊息記錄。以下個別

說明開發環境內常用的視窗,於《第2-2節:封裝設計實作》透過step by step進一

步說明豐富的操作介面。

2-1-1 方案總管視窗❙

在「方案總管」中可透過樹狀架構列舉出專案物件清單。SSDT內所建立的

「Integration Services專案」可以放在一般的Visual Studio方案管理之下,方案與

專案只是邏輯的管理單位。完成設計的封裝將以XML格式部署到檔案系統、SQL

Server的MSDB系統資料庫內。或以專案為單位,部署到SSIS 2012新提供SQL

Server執行個體中的「Integration Services目錄」。

透過主選單的「檢視」→「方案總管」選項,或是直接按熱鍵【Ctrl+Alt+L】開

啟「方案總管」。Integration Services專案內預設會有以下三個資料夾,與一個編

輯專案層級的參數節點Project.params。

以下分別說明專案節點下的子目錄用途:

連線管理員■ :在此建立的連線資料可提供專案中的封裝參照。由於SSIS 2012的

專案部署模式是以專案為單位,在此建立的共用連線內容也會一併與專案中的

封裝相依存。

SSIS封裝■ :資料夾存放設計好的封裝檔,副檔名為.dtsx。以往,IS專案內的

封裝名稱排序方式是依照檔案匯入專案的先後順序。在舊版的專案中排序封裝

名稱時,需要手動移除封裝再依序加入專案。新版的IS專案則提供「依名稱排

序」的功能(包含專案中的連線管理員項目也可排序喔)使用滑鼠右鍵點選

「SSIS封裝」節點後,於快捷選單中「依名稱排序」即可,如圖2-9所示。

環境中以多索引頁籤的方式呈現不同的編輯內容與執行後的訊息記錄。以下個別

說明開發環境內常用的視窗,於《第2-2節:封裝設計實作》透過

方案總管視窗

在「方案總管」中可透過樹狀架構列舉出專案物件清單。

Integration Services專案」可以放在一般的

專案只是邏輯的管理單位。完成設計的封裝將以

MSDB系統資料庫內。或以專案為單位,部署到

執行個體中的「Integration Services

透過主選單的「檢視」→「方案總管」選項,或是直接按熱鍵【

在「方案總管」中可透過樹狀架構列舉出專案物件清單。SSDT

專案」可以放在一般的Visual Studio方案管理之下,方案與

專案只是邏輯的管理單位。完成設計的封裝將以XML格式部署到檔案系統、

系統資料庫內。或以專案為單位,部署到SSIS 2012

目錄」。

透過主選單的「檢視」→「方案總管」選項,或是直接按熱鍵【

專案內預設會有以下三個資料夾,與一個編

Page 9: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 39

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

圖2-9:「Integration Services匯入專案精靈」執行步驟

其他■ :此資料夾則是讓你存放副檔名非.dtsx的其他檔案,(例如:相關說明文

件)。

此外,若要將其他已設計好的封裝加入專案時,可使用滑鼠右鍵點選專案節點,

選擇快捷選單「加入」→「現有的封裝」。在「加入現有封裝的副本」視窗,選

擇封裝所在位置,如圖2-10所示。

圖2-10:加入現有的封裝

若要加入專案的項目非*.dtsx檔案,則可利用「加入」→「現有項目」,將檔案加

入專案中,而非*.dtsx檔案的項目會被歸類於「其他」資料夾中。

Integration Services

:此資料夾則是讓你存放副檔名非

此外,若要將其他已設計好的封裝加入專案時,可使用滑鼠右鍵點選專案節點,

選擇快捷選單「加入」→「現有的封裝」。在「加入現有封裝的副本」視窗,選

擇封裝所在位置,如圖 所示。

此外,若要將其他已設計好的封裝加入專案時,可使用滑鼠右鍵點選專案節點,

選擇快捷選單「加入」→「現有的封裝」。在「加入現有封裝的副本」視窗,選

Page 10: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務40

以上所呈現的是SSIS 2012新提供的專案部署模型,若是從以往SSIS的專案升級,

或是直接在開啟SSIS 2012新專案時,在專案節點上以滑鼠右鍵選擇「轉換為封裝

部署模型」選項,則會呈現如圖2-9右方的方案總管視窗,在專案節點旁會特別標

註「封裝部署模型」,且專案內容的呈現方式轉回以往SSIS 2005/2008/2008 R2的

格式。

2-1-2 「工具箱」視窗❙

SSIS 2012專案中的「SSIS工具箱」可透過「SSIS設計師」右上角的快速按鈕開

啟,或是經由主選單「SSIS」→「SSIS工具箱」選項叫出視窗。若用Visual Studio

預設的主選單「檢視」→「工具箱」選項,會叫出空的工具箱,而這個工具箱預

設是提供開發.NET應用程式所用,以往採用此工具箱總是要載入許多用不到的元

件,因而拖慢整個設計環境起始的時間。

「SSIS工具箱」提供「控制流程工作」和「資料流程元件(Workflow Component)」,

當在「SSIS設計師」內切換不同頁籤時會呈現不同的工具內容,如圖2-11所示。

其使用方式與用途變動不大,你依然可以透過滑鼠雙擊「SSIS工具箱」的項目,

或以拖曳方式將工具箱的物件加入設計頁籤中編輯。操作上的改變則是在SSIS

2012之後增加了新的配置行為,你可以先使用滑鼠選定控制流程中的「容器」之

後,雙擊工具箱內的物件可直接加入該「容器」中。若滑鼠點選編輯畫面的空白

處再雙擊「SSIS工具箱」的項目,則會將項目配置到編輯畫面的空白處。

此外,SSIS 2012重新繪製代表各類工作的圖示、「SSIS工具箱」新增了更多的分

類,以利於找到想用的工具。分類項目都有「我的最愛」、「通用」與「其他工

作」,透過滑鼠點選項目,可以選擇擺放各元件到不同的項目下。

」→「SSIS工具箱」選項叫出視窗。若用

預設的主選單「檢視」→「工具箱」選項,會叫出空的工具箱,而這個工具箱預

應用程式所用,以往採用此工具箱總是要載入許多用不到的元

件,因而拖慢整個設計環境起始的時間。

工具箱」提供「控制流程工作」和「資料流程元件(

設計師」內切換不同頁籤時會呈現不同的工具內容,如圖

其使用方式與用途變動不大,你依然可以透過滑鼠雙擊「

或以拖曳方式將工具箱的物件加入設計頁籤中編輯。操作上的改變則是在

之後增加了新的配置行為,你可以先使用滑鼠選定控制流程中的「容器」之

後,雙擊工具箱內的物件可直接加入該「容器」中。若滑鼠點選編輯畫面的空白

工具箱」提供「控制流程工作」和「資料流程元件(Workflow Component

設計師」內切換不同頁籤時會呈現不同的工具內容,如圖

其使用方式與用途變動不大,你依然可以透過滑鼠雙擊「SSIS工具箱」的項目,

或以拖曳方式將工具箱的物件加入設計頁籤中編輯。操作上的改變則是在

之後增加了新的配置行為,你可以先使用滑鼠選定控制流程中的「容器」之

後,雙擊工具箱內的物件可直接加入該「容器」中。若滑鼠點選編輯畫面的空白

工具箱」的項目,則會將項目配置到編輯畫面的空白處。

重新繪製代表各類工作的圖示、「

類,以利於找到想用的工具。分類項目都有「我的最愛」、「通用」與「其他工

作」,透過滑鼠點選項目,可以選擇擺放各元件到不同的項目下。

Page 11: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 41

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10圖2-11:SSIS團隊專為呈現封裝可用元件所提供的「SSIS工具箱」

而代表各元件的圖示全部重新畫過,讓畫面變得更美觀。一些元件有局部的改

良而修改了對話窗,如「執行封裝工作」、「資料列計數」、「原始檔案目的

地」、「樞紐」⋯等,無功能變更的個別元件其設定對話窗也就維持原樣,讓既

有的封裝設計經驗可以延續下去。

另外,「SSIS工具箱」內新增了一些元件,例如SSIS團隊從Attunity公司購置的

「ODBC Source」、「ODBC Destination」、「CDC分隔器」、「CDC來源」、

「CDC控制工作」,以及自行開發的「運算式工作」、「DQS清理」等。並移除

了以往的「ActiveX Script工作」和「Execute DTS 2000 Package Task」,看來,在

這一版真的揮別了SQL 2000時代。

此外,在圖2-11右下角點選「尋找範例」,會自動跳出瀏覽器列出目前網際網路

上可用的範例。它所帶出來的URL範例如下:

h t t p://c o d e.m s d n.m i c r o s o f t.c o m/s i t e/s e a r c h?f[0].T y p e=T o p i c&f[0].Value=SsisDataflowTask

網址URL的參數會依據滑鼠所停駐的工具而有所不同。

圖2-11:SSIS團隊專為呈現封裝可用元件所提供的「

而代表各元件的圖示全部重新畫過,讓畫面變得更美觀。一些元件有局部的改

良而修改了對話窗,如「執行封裝工作」、「資料列計數」、「原始檔案目的

地」、「樞紐」⋯等,無功能變更的個別元件其設定對話窗也就維持原樣,讓既

有的封裝設計經驗可以延續下去。

團隊專為呈現封裝可用元件所提供的「SSIS工具箱」

而代表各元件的圖示全部重新畫過,讓畫面變得更美觀。一些元件有局部的改

良而修改了對話窗,如「執行封裝工作」、「資料列計數」、「原始檔案目的

地」、「樞紐」⋯等,無功能變更的個別元件其設定對話窗也就維持原樣,讓既

工具箱」內新增了一些元件,例如SSIS

ODBC Destination」、「CDC

控制工作」,以及自行開發的「運算式工作」、「

Execute DTS 2000 Package Task

Page 12: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務42

資料流程的工具箱增加「來源小幫手」、「目的地小幫手」,隨時透過精靈讓新

手較容易設定資料連接,而不似以往僅有在建立新專案時,可以選擇「Integration

Services連接專案精靈」,僅有一次透過精靈設定連接屬性。如圖2-12所示,連接

管理員視窗會列出曾經建立過的連線內容,下方的視窗會依照你所選擇的項目列

出連線字串。而新增連接管理員的方法和以前一樣並無改變。

圖2-12:來源小幫手對話窗

2-1-3 變數視窗❙

SSIS提供的使用者自定變數有「區域」變數以及「全域」變數的概念。在「變

數」視窗內,於「範圍」欄位檢視系統變數或使用者變數的可視性。在SSIS 2012

中的變數增強了幾項操作功能。在封裝設計環境右上角的「變數」按鈕叫出「變

數」視窗後,可發現視窗上方的工具列增加了一個按鈕。透過此按鈕叫出「選取

新的範圍」對話窗,可以重新設定變數所在的「範圍」,如圖2-13所示:

圖2-13:透過「選取新的範圍」對話窗,重新設定變數所在「範圍」

圖2-12:來源小幫手對話窗

變數視窗

提供的使用者自定變數有「區域」變數以及「全域」變數的概念。在「變

數」視窗內,於「範圍」欄位檢視系統變數或使用者變數的可視性。在

中的變數增強了幾項操作功能。在封裝設計環境右上角的「變數」按鈕叫出「變

:來源小幫手對話窗

提供的使用者自定變數有「區域」變數以及「全域」變數的概念。在「變

數」視窗內,於「範圍」欄位檢視系統變數或使用者變數的可視性。在

中的變數增強了幾項操作功能。在封裝設計環境右上角的「變數」按鈕叫出「變

數」視窗後,可發現視窗上方的工具列增加了一個按鈕。透過此按鈕叫出「選取

新的範圍」對話窗,可以重新設定變數所在的「範圍」,如圖

Page 13: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 43

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

當變數運用了「運算式」,則變數的圖示會改用有fx字體的裝飾作區別,透過兩

種不同的圖示可立即區別封裝內哪些變數使用了運算式,如圖2-14所示。

圖2-14:fx圖示代表變數的值是透過Expression定義

此外,變數的EvaluatAsExpression屬性值會自動改為True,如圖2-15所示。以往這

個屬性需要手動在屬性視窗內調整,若忘了修改此屬性,則封裝執行時不會動態

更新變數內容。

圖2-15:EvaluatAsExpression屬性值會自動變更為True

SSIS提供兩種類型的變數,使用者自訂變數和系統變數。使用者自訂變數由封裝

開發人員定義,而系統變數則由Integration Services定義。變數可讓封裝中的物件

彼此溝通,並可用於運算式和指令碼中。你可以根據需要而建立許多使用者自訂

變數,但無法建立系統變數。

由於系統變數提供的種類繁多,「變數」視窗預設僅會列出使用者建立的變數,

以及「SSIS設計師」內滑鼠所點到的工作範圍之下的變數。若需要列出所有變數

以及更多變數內容,可點選變數視窗的「方格選項」,在「變數方格選項」對話

窗勾選相關設定,如圖2-16所示。

EvaluatAsExpression屬性值會自動改為

個屬性需要手動在屬性視窗內調整,若忘了修改此屬性,則封裝執行時不會動態

EvaluatAsExpression屬性值會自動變更為

Page 14: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務44

圖2-16:透過「變數方格選項」可選擇是否要列出所有系統變數或所有範圍的變數

在新版的SSIS封裝中增加了許多系統變數,例如IgnoreConfigurationsOnLoad、

ProductVersion、LastModifiedProductVersion與ServerExecutionID。若你需要透過

程式管理封裝時,這些可能對你有所幫助。相關內容可參考線上說明。

2-1-4 參數視窗❙

「參數(Parameters)」是從外部,呼叫端傳進資訊給被呼叫端的一種方式。以

往,SSIS父封裝叫用子封裝時,若想要傳遞一些設定,必須從子封裝透過組態讀

取父封裝的變數,這違反了撰寫程式基本的封裝(Encapsulation)概念,因為子

封裝要了解父封裝的設計內容。SSIS 2012增加了「參數」的功能6,同樣地,也

有分封裝層級和專案層級。封裝層級的「參數」只用在特定封裝,專案層級的參

數可以被專案內所有封裝使用。

6. 「參數」只能用於針對「專案部署模型」而開發的專案。使用「專案部署模型」時,會將專案部署至SSISDB目錄,其中有一組功能齊全的檢視和預存程序,可用來管理專案提供給封裝的參數和常值。關於封裝部署的詳細資內容可參考《第12章:SSIS部署、管理與執行》。

:透過「變數方格選項」可選擇是否要列出所有系統變數或所有範圍的變數

SSIS封裝中增加了許多系統變數,例如

ProductVersion、LastModifiedProductVersion

程式管理封裝時,這些可能對你有所幫助。相關內容可參考線上說明。

參數視窗

:透過「變數方格選項」可選擇是否要列出所有系統變數或所有範圍的變數

封裝中增加了許多系統變數,例如IgnoreConfigurationsOnLoad

LastModifiedProductVersion與ServerExecutionID。若你需要透過

程式管理封裝時,這些可能對你有所幫助。相關內容可參考線上說明。

)」是從外部,呼叫端傳進資訊給被呼叫端的一種方式。以

父封裝叫用子封裝時,若想要傳遞一些設定,必須從子封裝透過組態讀

取父封裝的變數,這違反了撰寫程式基本的封裝(

SSIS 2012增加了「參數」的功能

Page 15: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 45

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

「參數」的用法與SSIS以往提供的「變數」近似,可用來改變封裝內物件在執行

時期的屬性,但在執行封裝時,無法變更「參數」內容值7。在SSDT開發工具的

「方案總管」中按兩下Project.params開啟「參數」視窗即可建立、修改或刪除專

案參數,如圖2-17所示。

圖2-17:建立專案內封裝共用參數

在SSDT中建立「參數」時,需要指定以下幾個內容。

名稱■ :參數名稱。

參數類型■ :透過下拉選單指定參數類行為字串或數值...等。

值■ :這裡指的是設計時指派的參數預設值,稱為設計階段之預設值。

區分■ 8:預設值為False,若更改為True則代表此參數為敏感性參數,其值會在

目錄中加密。若透過T-SQL或SSMS來檢視時,會顯示為NULL值。若設定該參

數為機密資料時,其存放於封裝的參數內容會自動加密,且在設計畫面上的

「值」改以星號呈現。檢視封裝原始的XML內容,可以看到如下的加密結果:

7. 類似撰寫應用程式時父函數呼叫子函數,以傳值(By Value)的方式傳入參數,而非以傳址(By Reference)的方式傳遞。

8. 其「區分」之翻譯有些奇怪,它的原文為「Sensitive」,或許翻為「機密」或「敏感」較為適合。

圖2-17:建立專案內封裝共用參數

中建立「參數」時,需要指定以下幾個內容。

:參數名稱。

:透過下拉選單指定參數類行為字串或數值

:這裡指的是設計時指派的參數預設值,稱為設計階段之預設值。

:預設值為False,若更改為

:建立專案內封裝共用參數

中建立「參數」時,需要指定以下幾個內容。

:透過下拉選單指定參數類行為字串或數值 等。

:這裡指的是設計時指派的參數預設值,稱為設計階段之預設值。

True則代表此參數為敏感性參數,其值會在

來檢視時,會顯示為

數為機密資料時,其存放於封裝的參數內容會自動加密,且在設計畫面上的

「值」改以星號呈現。檢視封裝原始的XML內容,可以看到如下的加密結果:

Page 16: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務46

<DTS:PackageParameter DTS:CreationName="" DTS:DataType="8" DTS:DTSID="{8F5258B6-DD80-4D84-9CD4-DBC17DB5593D}" DTS:ObjectName="strFile" DTS:Required="True" DTS:Sensitive="True"> <DTS:Property DTS:Name="ParameterValue"> <DTS:Property DTS:DataType="8" DTS:Name="ParameterValue" Encrypted="1">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAQFqscUqX4UadKBjAkvk⋯</DTS:Property> </DTS:Property></DTS:PackageParameter>

必要(原文為Required)■ :屬性若設為真,則在封裝執行時,該參數必須有

值。

描述■ :為便於維護,可以於此處簡略說明參數用途。

「封裝設計師」的「參數」頁籤可建立「封裝」層級的「參數」,其定義與專案

層級參數相同,僅是應用範圍限於封裝,如圖2-18所示:

圖2-18:封裝內的參數設定頁籤

將專案部署到SQL Serer執行個體中的「Integration Services目錄」之後,在SSMS

管理工具中的「物件總管」視窗可開啟封裝並執行它。執行封裝時可透過工具內

的「參數」頁籤修改封裝執行的內容,而不需要編輯和重新部署封裝,如圖2-19

所示。關於封裝部署與執行可參考《第12章:SSIS部署、管理與執行》

>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAQFqscUqX4UadKBjAkvk

:屬性若設為真,則在封裝執行時,該參數必須有

:為便於維護,可以於此處簡略說明參數用途。

「封裝設計師」的「參數」頁籤可建立「封裝」層級的「參數」,其定義與專案

層級參數相同,僅是應用範圍限於封裝,如圖

:為便於維護,可以於此處簡略說明參數用途。

「封裝設計師」的「參數」頁籤可建立「封裝」層級的「參數」,其定義與專案

層級參數相同,僅是應用範圍限於封裝,如圖

:為便於維護,可以於此處簡略說明參數用途。

「封裝設計師」的「參數」頁籤可建立「封裝」層級的「參數」,其定義與專案

層級參數相同,僅是應用範圍限於封裝,如圖2-18所示:

Page 17: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 47

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

圖2-19:SSMS管理環境也支援參數設定

若要在設計封裝時,以SSIS Expression引用這些參數,其名稱格式如下:

$Project/Package::參數名稱

專案等級的參數使用Project字樣,封裝等級的參數使用Package字樣。若要取參數

值,則須以@開頭並以中括號括起參數,格式如下:

@[$Project/Package::參數名稱]

在此透過範例說明(參照本章範例程式碼中的ForLoop.dtsx封裝),筆者在封裝

內建立了一個名稱為intCount的參數,則設計封裝內容時,在「For迴圈容器」9和

「指令碼工作」引用該參數的方式如圖2-20所示:

圖2-20:在「For迴圈容器」和「指令碼工作」引用參數

9. 關於「For迴圈容器」的使用說明可參考《第5章:容器交易與管理》。

:SSMS管理環境也支援參數設定

SSIS Expression引用這些參數,其名稱格式如下:

參數名稱

字樣,封裝等級的參數使用

開頭並以中括號括起參數,格式如下:

專案等級的參數使用Project字樣,封裝等級的參數使用

@開頭並以中括號括起參數,格式如下:

@[$Project/Package::參數名稱]

在此透過範例說明(參照本章範例程式碼中的

字樣,封裝等級的參數使用Package字樣。若要取參數

開頭並以中括號括起參數,格式如下:

ForLoop.dtsx封裝),筆者在封裝在此透過範例說明(參照本章範例程式碼中的ForLoop.dtsx

的參數,則設計封裝內容時,在「

2-20所示:

Page 18: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務48

圖2 - 2 0的範例中,筆者定義了一個封裝變數為 i,在「F o r迴圈容器」的

「EvalExpression」設定中,依照SSISExpression的定義,透過@符號取參數或變

數值。因此,若執行迴圈的評估條件是:在變數I的值小於等於封裝參數intCount

值時,迴圈繼續執行,其語法如下:

@i<=@[$Package::intCount]

在圖2-20左下方「指令碼工作」的「ReadOnlyVariables」屬性,可以透過「選取

變數」對話窗分別選擇變數和參數,而在其內的.NET程式碼存取參數之方式與變

數相同,範例語法如下:

MessageBox.Show("i=" & Dts.Variables("i").Value.ToString() & _ ", intCount=" & Dts.Variables("intCount").Value.ToString())

除了上述透過「For迴圈容器」和「指令碼工作」引用參數外,若在父封裝藉由

「執行封裝工作」呼叫子封裝時,於「封裝」頁籤的「ReferenceType」選項使用

的是「專案參考」10,則在「參數繫結」頁籤可以設定子封裝的參數,其值需透

過父封裝的參數或變數賦予,如圖2-21所示:

圖2-21:透過「執行封裝工作」呼叫子封裝時設定子封裝的參數值

10. SSIS 2012以專案為單位部署時,封裝彼此叫用可以不需實體完整路徑。部署後,專案中的封裝較容易找到彼此。若ReferenceType選擇外部參考,則需如以往的版本,以完整檔案路徑設定要叫用的子封裝。

MessageBox.Show("i=" & Dts.Variables("i").Value.ToString() & _ ", intCount=" & Dts.Variables("intCount").Value.ToString())

For迴圈容器」和「指令碼工作」引用參數外,若在父封裝藉由

「執行封裝工作」呼叫子封裝時,於「封裝」頁籤的「

的是「專案參考」10,則在「參數繫結」頁籤可以設定子封裝的參數,其值需透

過父封裝的參數或變數賦予,如圖2-21所示:

迴圈容器」和「指令碼工作」引用參數外,若在父封裝藉由

「執行封裝工作」呼叫子封裝時,於「封裝」頁籤的「ReferenceType

,則在「參數繫結」頁籤可以設定子封裝的參數,其值需透

所示:

Page 19: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 49

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

除了在「執行封裝工作」設定子封裝的參數值,透過dtexec工具程式、Agent Job

的「SQL Server Integration Services封裝」類型步驟或直接經由Management Studio

執行封裝⋯等,都可以在執行封裝前提供參數值。最後,關於封裝參數或專案參

數的相關資訊可參考以下的blog:

http://blogs.msdn.com/b/mattm/archive/2011/07/16/configuring-projects-and-packages-using-parameters.aspx

透過「參數」可將值指派給封裝內的屬性。依據專案在部署生命週期中的狀態,

最多可以指派三種不同類型的值給每個參數。這三種類型依照其可套用至參數的

順序列出,如下所示:

設計階段之預設值■ :在SSDS中建立或編輯專案時,所指派的預設值(如圖

2-17、2-18所示)。此值會一直跟著專案。

伺服器預設值■ :當專案位於目錄中,在專案部署期間或透過「Integration

Services目錄」提供的「環境」變數之預設值。此值會覆寫設計預設值。

執行值■ :參考封裝執行的特定執行個體而指派的值。此指派會覆寫所有其他

值,但只會套用至封裝的單一執行個體(例如:在圖2-19的參數頁籤修改參數

值,再執行封裝)。

以下透過簡單的範例說明封裝內參數的應用。

實作演練2-1:使用功能選單參數化工作

在SSDT環境中透過「參數化對話方塊」可將參數與封裝中的工作屬性建立關

聯。以下範例將說明操作方式。首先在「控制流程」頁籤內建立「執行處理」工

作,透過「執行處理」工作執行sqlcmd執行檔,並執行下列程式碼。

-S localhost -E -i C:\BookSamples\SSIS2012\CH02_Introduction\ExecuteSQL\DoSomething.sql -o C:\BookSamples\SSIS2012\CH02_Introduction\ExecuteSQL\Result2.log

「執行處理」工作屬性設定如圖2-22所示。

最多可以指派三種不同類型的值給每個參數。這三種類型依照其可套用至參數的

SSDS中建立或編輯專案時,所指派的預設值(如圖

所示)。此值會一直跟著專案。

伺服器預設值:當專案位於目錄中,在專案部署期間或透過「

目錄」提供的「環境」變數之預設值。此值會覆寫設計預設值。

:參考封裝執行的特定執行個體而指派的值。此指派會覆寫所有其他

值,但只會套用至封裝的單一執行個體(例如:在圖

值,再執行封裝)。

以下透過簡單的範例說明封裝內參數的應用。

:當專案位於目錄中,在專案部署期間或透過「

目錄」提供的「環境」變數之預設值。此值會覆寫設計預設值。

:參考封裝執行的特定執行個體而指派的值。此指派會覆寫所有其他

值,但只會套用至封裝的單一執行個體(例如:在圖2-19的參數頁籤修改參數

以下透過簡單的範例說明封裝內參數的應用。

:使用功能選單參數化工作

環境中透過「參數化對話方塊」可將參數與封裝中的工作屬性建立關

聯。以下範例將說明操作方式。首先在「控制流程」頁籤內建立「執行處理」工

Page 20: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務50

圖2-22:建立「執行處理」工作並設定屬性值

接下來,我們希望將上述範例中的Arguments屬性以封裝的參數值指派。只要以

滑鼠右鍵點選「執行處理」工作,然後從下拉式功能表中選取「參數化」選項來

啟動此對話窗。在「參數化」對話窗透過下拉選單選擇你要參數化的屬性,如圖

2-23。此處的參數「名稱」與預設「值」將隨著工作「屬性」不同而自動帶出相

對應的值,你只需稍作修改即可。

圖2-23:透過「參數化」對話窗建立參數

完成設定之後,「執行處理」工作的右上角將出現Fx圖示,代表此工作內的屬性

已透過運算式設定。切至「參數」頁籤,則會看到透過「參數化」對話窗所建立

的參數內容。

接下來,我們希望將上述範例中的Arguments

滑鼠右鍵點選「執行處理」工作,然後從下拉式功能表中選取「參數化」選項來

啟動此對話窗。在「參數化」對話窗透過下拉選單選擇你要參數化的屬性,如圖

。此處的參數「名稱」與預設「值」將隨著工作「屬性」不同而自動帶出相

對應的值,你只需稍作修改即可。對應的值,你只需稍作修改即可。

Page 21: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 51

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10圖2-24:在「參數」頁籤檢視封裝中的參數內容

從「屬性」視窗可以看出來:「參數化」對話窗為「執行處理」工作定義了運算

式(Expression),讓「執行處理」工作的「Arguments」屬性透過封裝參數或專

案參數設定。

以上僅簡單介紹「參數」的設定方式,在《第12章:SSIS部署、管理與執行》將

有更詳細的介紹。

2-1-5 連接管理員❙

SSIS 2012專案中新增了「連接管理員」目錄,此目錄取代了以往的「資料來源」

與「資料來源檢視」目錄。在「連接管理員」目錄中建立的連接會以*.conmgr為

副檔名存在專案中,專案中的封裝可共用此連線。以滑鼠右鍵點選「連接管理

員」視窗,選擇快捷選單中的「新增連接管理員」選項,於「加入SSIS連接管理

員」對話窗即可建立新的「連接」,如圖2-25所示。

圖2-24:在「參數」頁籤檢視封裝中的參數內容

從「屬性」視窗可以看出來:「參數化」對話窗為「執行處理」工作定義了運算

Expression),讓「執行處理」工作的「

以上僅簡單介紹「參數」的設定方式,在《第

:在「參數」頁籤檢視封裝中的參數內容

從「屬性」視窗可以看出來:「參數化」對話窗為「執行處理」工作定義了運算

),讓「執行處理」工作的「Arguments」屬性透過封裝參數或專

以上僅簡單介紹「參數」的設定方式,在《第12章:SSIS部署、管理與執行》將

專案中新增了「連接管理員」目錄,此目錄取代了以往的「資料來源」

Page 22: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務52

圖2-25:建立專案中的連接管理員

上述步驟所建立的連接,其預設的連接名稱為「伺服器名稱.資料庫名稱」。若有

需要修改連接名稱可到「屬性」視窗修改Name屬性值,讓連接名稱更有意義。

當專案連接完成建立後,封裝內的連接管理員視窗立即會出現此專案連接。專案

連接會在連接名稱前標註「(專案)」,藉此可以很明確的區分封裝連接與專案連

接,如圖2-26所示。

圖2-26:更改專案連接管理員名稱

圖2-25:建立專案中的連接管理員

上述步驟所建立的連接,其預設的連接名稱為「伺服器名稱

需要修改連接名稱可到「屬性」視窗修改

當專案連接完成建立後,封裝內的連接管理員視窗立即會出現此專案連接。專案

連接會在連接名稱前標註「(專案)」,藉此可以很明確的區分封裝連接與專案連

所示。

:建立專案中的連接管理員

上述步驟所建立的連接,其預設的連接名稱為「伺服器名稱.資料庫名稱」。若有

需要修改連接名稱可到「屬性」視窗修改Name屬性值,讓連接名稱更有意義。

當專案連接完成建立後,封裝內的連接管理員視窗立即會出現此專案連接。專案

」,藉此可以很明確的區分封裝連接與專案連

Page 23: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 53

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

封裝內的連線資訊可在「連接管理員」視窗編輯。使用滑鼠右鍵在「連接管理

員」視窗內空白處點選右鍵,即可加入新的連線資訊。封裝中的「連接管理員」

視窗增強了一些功能。例如,當連接管理員的內容是透過SSIS Expression定義,

則代表連接的圖示旁會再出現fx圖示,如圖 2-27所示:

圖2-27:在「連接管理員」呈現透過Expression設定連接屬性的個別連接

「連接管理員」視窗中,可以各別對「連接」設定「離線工作」。在設計SSIS封

裝時,設計環境會透過「連接」直接存取資料源,藉以確定使用該連接的元件所

需之中繼資料,隨時確認其設定是否正確。但若在設計時,無法存取資料連接所

指定的資料源,或是網路連接速度很慢,而你僅是想快速開啟封裝以檢視設計內

容,可以透過主選單「SSIS」→「離線工作」選項,但這會中斷封裝內所有的連

接管理員。在SSIS 2012的

SSDT內,可以個別選擇不同

的連接管理員,透過快捷選

單設定其離線,如圖2-28所

示。被設定離線的連接其圖

示會增加一個紅色圓點,而

這僅會影響到使用該連接的

元件。

圖2-28:在資料管理員個別選擇不同的資料連接以設定其離線

2-27:在「連接管理員」呈現透過

「連接管理員」視窗中,可以各別對「連接」設定「離線工作」。在設計

裝時,設計環境會透過「連接」直接存取資料源,藉以確定使用該連接的元件所

需之中繼資料,隨時確認其設定是否正確。但若在設計時,無法存取資料連接所

指定的資料源,或是網路連接速度很慢,而你僅是想快速開啟封裝以檢視設計內

Expression設定連接屬性的個別連接

「連接管理員」視窗中,可以各別對「連接」設定「離線工作」。在設計

裝時,設計環境會透過「連接」直接存取資料源,藉以確定使用該連接的元件所

需之中繼資料,隨時確認其設定是否正確。但若在設計時,無法存取資料連接所

指定的資料源,或是網路連接速度很慢,而你僅是想快速開啟封裝以檢視設計內

」→「離線工作」選項,但這會中斷封裝內所有的連

Page 24: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務54

透過圖2-28的快捷選單中的「轉換為封裝連接」即可將「專案連接」改為「封裝

連接」,且專案中的「連接管理員」資料夾會將*.commer檔案移除。同理,若是

「封裝連接」也能快速變更為「專案連接」。

2-1-6 屬性視窗❙

「屬性」視窗預設在開發環境的右側,若不在設計環境內,可經由主選單的「檢

視」→「屬性視窗」選項開啟它。「屬性」視窗內所提供的內容會依焦點所在的

物件,而列出不同屬性項目以供設定,如圖2-29示。在「屬性」視窗的「識別」

群組內修改Name屬性內容,可讓「控制流程」頁籤上的工作,更貼切地描述它所

處理的內容。你也可以在「控制流程」頁籤內,直接對「指令碼工作」圖示內的

文字修改。須留意的是,同一個封裝內不得有兩個相同的物件名稱。

圖2-29:修改物件的屬性名稱

接著,介紹幾個封裝屬性的基本設定,讓你有初步的了解。以滑鼠左鍵點選「屬

性」視窗「分類」圖示,將「屬性」視窗提供的設定項目依類別來排列。

屬性內容,可讓「控制流程」頁籤上的工作,更貼切地描述它所

處理的內容。你也可以在「控制流程」頁籤內,直接對「指令碼工作」圖示內的

文字修改。須留意的是,同一個封裝內不得有兩個相同的物件名稱。

Page 25: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 55

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10圖2-30:封裝屬性

「識別」屬性■ :記錄著封裝最初的建立日期、建立的電腦名稱以及建立者。封

裝屬性的Name值會直接對應到封裝檔案的名稱。換句話說,當修改封裝檔案

名稱時,屬性的Name值會跟著自動修改,反之亦然。封裝屬性的ID值是建立

封裝時所指派的GUID值。這個屬性是唯讀的。若要為ID屬性產生新的隨機

值11,可在下拉式清單中選取「<產生新的識別碼>」。

「版本」屬性■ :在VersionBuild部分,當設計完封裝點選「存檔」按鈕時,

VersionBuild值會自動增加12。利用此屬性可達到單一的版本控管。

2-1-7 封裝執行環境❙

接下來,透過簡單的範例示範如何在「SSIS設計師」中,執行已設計好的封裝。

請參照本章範例程式碼中的Package.dtsx封裝,「控制流程」頁籤簡單的建立一

11. 若你設計的封裝是經由複製再修改而成的,則原始封裝與新產生的封裝會得到同一個識別ID,這時就需要透過手動的方式配置新的識別ID給封裝。

12. 當然,你也可以手動修改封裝屬性值VersionBuild的版本編號。存檔後,編輯環境仍然會自動增加。不過,在此不建議手動更改VersionBuild值,應由編輯環境自動編號較不會混淆。

圖2-30

「識別」屬性:記錄著封裝最初的建立日期、建立的電腦名稱以及建立者。封

Name值會直接對應到封裝檔案的名稱。換句話說,當修改封裝檔案

名稱時,屬性的Name值會跟著自動修改,反之亦然。封裝屬性的

封裝時所指派的GUID值。這個屬性是唯讀的。若要為

:封裝屬性

:記錄著封裝最初的建立日期、建立的電腦名稱以及建立者。封

值會直接對應到封裝檔案的名稱。換句話說,當修改封裝檔案

值會跟著自動修改,反之亦然。封裝屬性的

值。這個屬性是唯讀的。若要為ID屬性產生新的隨機

產生新的識別碼

部分,當設計完封裝點選「存檔」按鈕時,

。利用此屬性可達到單一的版本控管。

Page 26: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務56

個「指令碼工作」。使用滑鼠右鍵雙擊此工作,在「指令碼工作編輯器」設定

「ScriptLanguage」指定指令碼使用的語言為Microsoft Visual Basic 2010。點選

「編輯指令碼」,在程式碼編輯環境輸入下列指令:

Dim Path As String = Dts.Variables("Path").Value.ToString() Dim FileName As String = Dts.Variables("FileName").Value.ToString() MessageBox.Show("動態產生的檔案路徑:" & Path + FileName) MessageBox.Show("Target:" & Dts.Connections("OLEDB Target").Connection-String)

如圖2-31所示,透過MessageBox類別簡單的秀出目前封裝內的「變數」內容以及

「連接管理員」所使用的連線字串。

圖2-31:指令碼的程式編輯環境

完成程式碼編輯後,點選圖2-31右上角的「X」符號,關閉程式碼編輯畫面。回

到「指令碼工作編輯器」對話窗後點選「確定」,即可完成「指令碼工作」設

計。接著,你可以使用下列其中一種方式執行封裝。

MessageBox類別簡單的秀出目前封裝內的「變數」內容以及

「連接管理員」所使用的連線字串。

Page 27: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 57

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

以滑鼠右鍵在「方案總管」視窗點選「封裝」,並於快捷選單內選擇「執行封■

裝」選項。

點選編輯環境上方工具列中,代表「開始偵錯」的綠色箭頭。■

或是按下快捷鍵【F5】。■

點選主選單「偵錯」→「開始偵錯」選項,開始執行封裝。■

或是在「控制流程」頁籤,使用滑鼠右鍵點選「指令碼工作」,選擇快捷選單■

中的「執行工作」選項,單獨執行指令碼工作。

偵錯工具

圖2-32:在「SSIS封裝設計師」內執行封裝

執行的過程中,工具選單會新增一組「偵錯」工具按鈕。完成執行後,或想要停

止執行時,可點選「停止偵錯」按鈕回復到編輯模式。在偵錯模式下執行SSIS

時,會以不同顏色的圖示友善地呈現各工作的執行狀況,不同的是SSIS 2012改變

以往除錯階段各元件呈現進行中/成功/失敗等狀態的表示法,如圖2-33所示:

圖2-33:在SSDT執行除錯時,透過元件右上的小圖示呈現該元件的執行狀態

圖2-32:在「SSIS封裝設計師」內執行封裝

執行的過程中,工具選單會新增一組「偵錯」工具按鈕。完成執行後,或想要停

止執行時,可點選「停止偵錯」按鈕回復到編輯模式。在偵錯模式下執行

時,會以不同顏色的圖示友善地呈現各工作的執行狀況,不同的是

失敗等狀態的表示法,如圖

Page 28: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務58

各圖示與顏色的意義如表2-1:

顏色 狀態

工作以灰色字呈現 設定「停用」不要執行13

白色工作或元件,右上角未有圖示 尚未執行

土黃色旋轉輪 正在執行

綠色勾 執行完畢,結果成功

紅色叉 執行完畢,結果失敗

表2-1:「SSIS設計師」以不同顏色呈現各工作的狀態

2-1-8 封裝XML內容❙

SSIS設計、建立、存取和執行的單元都以封裝為單位,SSIS 2012之後則加入

了以專案為開發 /部署單元的概念。封裝內含各種物件,諸如:連接、容器

(container)、工作(task)、優先順序條件約束(precedence constraint)、資料

流程元件(Data Flow Component)、變數等。

「SSIS封裝設計師」的編輯畫面根據性質可分為「XML」與「設計(Design)」

兩種。而預設編輯介面是「封裝設計師」的圖形環境,它透過多索引頁籤的方式

呈現「控制流程」、「資料流程」、「參數」、「事件處理常式」、「封裝總

管」和「進度」等不同的內容。在「封裝設計師」環境內以拖曳、點選、設定的

方式設計封裝,實際在背後建立以XML描述的封裝內容。

使用滑鼠右鍵在方案總管內點選封裝檔案(*.dtsx)後,選取快捷選單內的「檢視

程式碼」選項即可檢視封裝的XML定義,如圖2-34所示。比較新舊版本的封裝

內容,可發現以往版本的封裝屬性多以XML元素表示,SSIS 2012後則多改為屬

性,且XML的編排較為工整容易閱讀。

13. 你可以在「控制流程」頁籤內,以滑鼠右鍵點選容器或工作後,選擇「停用」選項。當然,可以滑鼠右鍵點選遭停用的容器或工作,選擇「啟用」選項來重新啟用該容器或工作。

設計師」以不同顏色呈現各工作的狀態

設計、建立、存取和執行的單元都以封裝為單位,

了以專案為開發 /部署單元的概念。封裝內含各種物件,諸如:連接、容器

)、工作(task)、優先順序條件約束(

Data Flow Component)、變數等。

封裝設計師」的編輯畫面根據性質可分為「

兩種。而預設編輯介面是「封裝設計師」的圖形環境,它透過多索引頁籤的方式

呈現「控制流程」、「資料流程」、「參數」、「事件處理常式」、「封裝總

設計、建立、存取和執行的單元都以封裝為單位,SSIS 2012

部署單元的概念。封裝內含各種物件,諸如:連接、容器

)、優先順序條件約束(precedence constraint

)、變數等。

封裝設計師」的編輯畫面根據性質可分為「XML」與「設計(

兩種。而預設編輯介面是「封裝設計師」的圖形環境,它透過多索引頁籤的方式

呈現「控制流程」、「資料流程」、「參數」、「事件處理常式」、「封裝總

管」和「進度」等不同的內容。在「封裝設計師」環境內以拖曳、點選、設定的

描述的封裝內容。

使用滑鼠右鍵在方案總管內點選封裝檔案(*.dtsx)

Page 29: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 59

01

06

02

04

07

05

08

03

09

02-01

Integration Services

專案

PART

10

圖2-34:檢視程式碼時,以工整內縮的XML呈現SSIS封裝的實際內容

雖然SSIS封裝是透過所見及所得的方式完成設計,因此我們不太需要關注於XML

內容。不過稍微了解SSIS在XML的改善之處,這有助於了解以XML記載封裝設

計的基本設計理念。接下來,簡單說明幾項SSIS 2012在XML改善之處。

不存放預設值■

物件屬性的預設值不會存在封裝定義內,例如,任何一個「連接管理員」都有一

個屬性叫「DelayValidation」,預設值是False。新的封裝會改成除非你將該值設

為True,它才存放在封裝內,否則不會有以下粗體的這一行:

<DTS:ConnectionManager DTS:refId="Package.ConnectionManagers[local_Northwind]" DTS:CreationName="ODBC" DTS:DelayValidation="True"⋯

但以往的SSIS封裝依然會存:emuser

<DTS:ConnectionManager><DTS:Property DTS:Name="DelayValidation">0</DTS:Property>

或許,這代表執行封裝的工具程式知道什麼是預設值,所以沒讀到設定,就以預

設值的方式執行,而以往的執行工具沒有物件屬性的預設值,僅有設計工具知道

預設值,所以新增一個封裝,就將所有的預設值寫入到dtsx,而執行工具一切要

憑封裝內所有屬性的設定決定。

:檢視程式碼時,以工整內縮的

封裝是透過所見及所得的方式完成設計,因此我們不太需要關注於

XML的改善之處,這有助於了解以

計的基本設計理念。接下來,簡單說明幾項

不存放預設值

物件屬性的預設值不會存在封裝定義內,例如,任何一個「連接管理員」都有一

DelayValidation」,預設值是

,它才存放在封裝內,否則不會有以下粗體的這一行:

<DTS:ConnectionManager

SSIS 2012在XML改善之處。

物件屬性的預設值不會存在封裝定義內,例如,任何一個「連接管理員」都有一

False。新的封裝會改成除非你將該值設

,它才存放在封裝內,否則不會有以下粗體的這一行:

DTS:refId="Package.ConnectionManagers[local_Northwind]"

Page 30: SQL Server Data Tools 環境介紹

SQL Server 2012 SSIS整合服務60

所有的元素若出現多次,將會包含在一個父元素內■

例如:若一個封裝內有加入兩個連接管理員,新版的寫法如下:

<DTS:ConnectionManagers> <DTS:ConnectionManager DTS:refId="Package.ConnectionManagers[LocalHost.tempdb1]" DTS:CreationName="ODBC" DTS:DTSID="{B220B9AF-C427-4D9E-8023-5094C5B7132C}" DTS:ObjectName="LocalHost.tempdb1"> <DTS:ObjectData> <DTS:ConnectionManager DTS:ConnectionString="server=.;Driver={SQL Server Native Client 11.0};trusted_connection=Yes;app=MicrosoftR Visual StudioR 2010;wsid=SQL2012;database=tempdb;" /> </DTS:ObjectData> </DTS:ConnectionManager> <DTS:ConnectionManager DTS:refId="Package.ConnectionManagers[local_Northwind]" DTS:CreationName="ODBC" DTS:DelayValidation="True" DTS:DTSID="{0A6A8C30-6FAE-45EE-BB0E-9CD313047F8E}" DTS:ObjectName="local_Northwind"> <DTS:ObjectData> <DTS:ConnectionManager DTS:ConnectionString="Dsn=local_Northwind;" /> </DTS:ObjectData> </DTS:ConnectionManager> </DTS:ConnectionManagers>

以往的封裝比較沒有階層架構,而舊版的寫法如下:

<DTS:ConnectionManager><DTS:Property DTS:Name="DelayValidation">0</DTS:Property><DTS:Property DTS:Name="ObjectName">exec.log</DTS:Property><DTS:Property DTS:Name="DTSID">{8893C900-1846-427E-998D-8386B2B352BC} </DTS:Property><DTS:Property DTS:Name="Description"></DTS:Property><DTS:Property DTS:Name="CreationName">FILE</DTS:Property><DTS:ObjectData><DTS:ConnectionManager><DTS:Property DTS:Name="FileUsageType">1</DTS:Property><DTS:Property DTS:Name="ConnectionString">C:\201003TechNet_SSIS\Samples\Log\exec.log</DTS:Property></DTS:ConnectionManager></DTS:ObjectData> </DTS:ConnectionManager><DTS:ConnectionManager><DTS:Property DTS:Name="DelayValidation">0</DTS:Property><DTS:Property DTS:Name="ObjectName">LocalHost.AdventureWorks</DTS:Property>

DTS:ConnectionString="server=.;Driver={SQL Server Native Client 11.0};trusted_connection=Yes;app=MicrosoftR Visual StudioR 2010;wsid=SQL2012;d

DTS:refId="Package.ConnectionManagers[local_Northwind]" DTS:CreationName="ODBC" DTS:DelayValidation="True" DTS:DTSID="{0A6A8C30-6FAE-45EE-BB0E-9CD313047F8E}" DTS:ObjectName="local_Northwind"> <DTS:ObjectData> <DTS:ConnectionManager DTS:ConnectionString="Dsn=local_Northwind;" /> </DTS:ObjectData> </DTS:ConnectionManager>

</DTS:ConnectionManagers>

DTS:refId="Package.ConnectionManagers[local_Northwind]"

DTS:DTSID="{0A6A8C30-6FAE-45EE-BB0E-9CD313047F8E}"

DTS:ConnectionString="Dsn=local_Northwind;" />

以往的封裝比較沒有階層架構,而舊版的寫法如下:

<DTS:Property DTS:Name="DelayValidation">0</DTS:Property><DTS:Property DTS:Name="ObjectName">exec.log</DTS:Property>

Page 31: SQL Server Data Tools 環境介紹

CHAPTER 02 SQL Server Data Tools環境介紹 61

01

06

02

04

07

05

08

03

09

02-02

封裝設計實作

PART

10

<DTS:Property DTS:Name="DTSID">{E9077A77-111D-475F-92FE-81E5E9FE638F} </DTS:Property><DTS:Property DTS:Name="Description"></DTS:Property><DTS:Property DTS:Name="CreationName">OLEDB</DTS:Property><DTS:ObjectData><DTS:ConnectionManager><DTS:Property DTS:Name="Retain">0</DTS:Property><DTS:Property DTS:Name="ConnectionString">Data Source=.;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;</DTS:Property></DTS:ConnectionManager></DTS:ObjectData></DTS:ConnectionManager>

上述新舊版本的比較,同時也可以看出新版偏向以XML屬性(attribute)存放設

定,而不像舊版偏向以XML元素(element)記載封裝設計內容。

由於SSDT改善了非常多處設計封裝的方式,在此無法一一詳列,就請自行感受

02-02 封裝設計實作

以往SQL 7.0/2000 DTS為資料轉換提供的工作並不多,僅有「轉換資料工作」、

「資料導向查詢工作」和「Parallel Data Pump Task」。SSIS則在資料處理流程

提供了大量的元件,如彙總、查閱、衍生的資料行、多重傳遞、聯集全部、排

序...等等。並提出了串接資料處理流程的概念,也就讓資料處理的每一階段都可

以在記憶體中完成,並將資料處理的結果交給下一個元件繼續加工,此種處理方

式也稱為pipeline。由於SSIS不必像以往DTS常常要透過多次的中介資料表(temp

table)來處理,而在資料庫內重新寫入/讀出中介記錄是非常耗時費事的,SSIS儘

量讓所有的商業邏輯都在記憶體中完成,並善用多CPU的能力,以提升整體系統

效能。

SSIS 2012封裝設計最大的改變應屬加入了專案的共通屬性,以利一整組多個封

裝的設定與執行。接下來將透過練習了解如何建立基本的封裝,以及「控制流

程」、「資料流程」的應用。

並分三個部分介紹如何透過「SSIS設計師」所提供的「控制流程」、「資料流

程」頁籤擷取來源端的資料,並寫入目的端。

元素(element

改善了非常多處設計封裝的方式,在此無法一一詳列,就請自行感受

封裝設計實作

SQL 7.0/2000 DTS為資料轉換提供的工作並不多,僅有「轉換資料工作」、

「資料導向查詢工作」和「Parallel Data Pump Task

提供了大量的元件,如彙總、查閱、衍生的資料行、多重傳遞、聯集全部、排

等等。並提出了串接資料處理流程的概念,也就讓資料處理的每一階段都可

以在記憶體中完成,並將資料處理的結果交給下一個元件繼續加工,此種處理方

。由於SSIS不必像以往

為資料轉換提供的工作並不多,僅有「轉換資料工作」、

Parallel Data Pump Task SSIS則在資料處理流程

提供了大量的元件,如彙總、查閱、衍生的資料行、多重傳遞、聯集全部、排

等等。並提出了串接資料處理流程的概念,也就讓資料處理的每一階段都可

以在記憶體中完成,並將資料處理的結果交給下一個元件繼續加工,此種處理方

DTS常常要透過多次的中介資料表(

讀出中介記錄是非常耗時費事的,

量讓所有的商業邏輯都在記憶體中完成,並善用多