SQL Server 2008
SQL Server 2008 R2
請參考以下的實作練習:
實作練習:使用「指令碼元件」來建立資料來源
範例說明:
需求:讀取「一般檔案來源」內的資料,執行相關轉換後匯出到「一般檔案目的地」。
工作流程如下:
(1) 使用「一般檔案連接管理員」來接到來源的文字檔案。
(2) 使用「指令碼元件」,設定為其資料來源。
(3) 設定與撰寫此「指令碼元件」內的指令碼程式。
(4) 執行相關轉換後匯出到「一般檔案目的地」。
準備工作:
步驟01. 將來源的文字檔案,放置到路徑:"C:\mySSIS\myProducts.txt"。
工作零:
步驟01. 新增加一個封裝程式。
步驟02. 在「控制流程」頁面,新增加一個「資料流程工作」。
步驟03. 點選「資料流程」頁面。
工作一:使用「一般檔案連接管理員」接到來源資料檔案
步驟01. 在「資料流程」頁面,在左下角的「連接管理員」區域。滑鼠右鍵,選擇「新增一般檔案連接」。
步驟02. 在「一般檔案連接管理員編輯器」視窗,點選「一般」頁面,輸入以下的參數:
在「連接管理員名稱」方塊,輸入:TXT_myProducts。
在「選取檔案並指定檔案屬性和檔案格式」區域,在「檔案名稱」方塊,輸入:C:\mySSIS\myProducts.txt。
其餘接受預設值,再點選「資料行」、「進階」、「預覽」等頁面。
點選「確定」。
工作二:使用「指令碼元件」,設定為資料來源
步驟01. 在左邊的「工具箱」,展開「資料流程轉換」區域,選取「指令碼元件」,拖曳到「資料流程」頁面。
步驟02. 在「選取指令碼元件類型」視窗,在「指令資料流程中如何使用指令碼」區域,點選「來源」。
--01_在「選取指令碼元件類型」視窗
點選「確定」。
步驟03. 在「指令碼轉換編輯器」視窗,在左邊窗格,點選「輸入及輸出」頁籤,輸入以下的參數:
在中間的「指定指令碼元件的資料行屬性」區域,在「輸入及輸出」區域。
在中間窗格,點選與展開「輸出 0」節點。
在右邊窗格,在「通用屬性」區域,在「Name」方塊,輸入:myProductsOutput。
在中間窗格,點選「輸出資料行」節點。在下方區域,點選「加入資料行」。
點選新增加的「資料行」,在右邊窗格,在「通用屬性」區域,在「Name」方塊,輸入:ProductID。
在「資料類型屬性」區域,在「DataType」方塊,設定為:四位元組帶正負號的整數 [DT_I4]。
在中間窗格,點選「輸出資料行」節點。在下方區域,點選「加入資料行」。
點選新增加的「資料行」,在右邊窗格,在「通用屬性」區域,在「Name」方塊,輸入:ProductName。
在「資料類型屬性」區域,在「DataType」方塊,設定為:字串 [DT_STR]。
在「Length」方塊,設定為:40。
--02 「輸入及輸出」頁籤,尚未設定
--03_設定ProductID
--04_設定ProductName
步驟04. 在左邊窗格,點選「連接管理員」頁籤,輸入以下的參數:
在右下角,點選「加入」。
在中間窗格,在「名稱」方塊,輸入:MyFlatFileSrcConnectionManager。
在中間窗格,在「連接管理員」方塊,下拉選取先前建立的一般檔案連接:TXT_myProducts。
--05_一般檔案連接:TXT_myProducts
步驟05. 在左邊窗格,點選「指令碼」頁籤,在「ScriptLanguage」方塊,選擇:Microsoft Visual Basic 2008。
在下方,點選「編輯指令碼」,輸入以下的指令碼:
... Imports System.IO ... ... Public Class ScriptMain Inherits UserComponent Private textReader As StreamReader Private exportedAddressFile As String Public Overrides Sub AcquireConnections(ByVal Transaction As Object) Dim connMgr As IDTSConnectionManager100 = _ Me.Connections.MyFlatFileSrcConnectionManager exportedAddressFile = _ CType(connMgr.AcquireConnection(Nothing), String) End Sub Public Overrides Sub PreExecute() MyBase.PreExecute() textReader = New StreamReader(exportedAddressFile) End Sub Public Overrides Sub CreateNewOutputRows() Dim nextLine As String Dim columns As String() Dim delimiters As Char() delimiters = ",".ToCharArray nextLine = textReader.ReadLine Do While nextLine IsNot Nothing columns = nextLine.Split(delimiters) With myProductsOutputBuffer .AddRow() .ProductID = columns(0) .ProductName = columns(1) End With nextLine = textReader.ReadLine Loop End Sub Public Overrides Sub PostExecute() MyBase.PostExecute() textReader.Close() End Sub End Class
步驟06. 在上方工具列選單,點選「檔案」\「結束」。
步驟07. 在「指令碼轉換編輯器」視窗,點選「確定」。
工作三:設定「一般檔案目的地」與執行封裝
步驟01. 在左邊的「工具箱」,展開「資料流程目的地」區域,選取「一般檔案目的地」,拖曳到「資料流程」頁面。
步驟02. 點選先前建立的「指令碼元件」,拖曳綠色的「資料流程路徑」到「一般檔案目的地」上。
步驟03. 點選此「一般檔案目的地」,設定以下的選項:
在「一般檔案目的地編輯器」視窗,在左邊窗格,點選「連接管理員」。點選「新增」。
在「一般檔案格式」視窗,點選「使用分隔符號」,點選「確定」。
在「一般檔案連接管理員編輯器」視窗,在「連接管理員名稱」方塊,輸入:TXT_Output_myProducts。
在「檔案名稱」方塊,輸入:C:\mySSIS\TXT_Output_myProducts.txt。
分別點選「資料行」、「進階」、「預覽」等頁籤。
點選「確定」。
步驟04. 點選「對應」頁籤,點選「確定」。
--06_「一般檔案目的地」_對應
步驟05. 執行偵錯此封裝。
--07 檢視所設計的封裝
--08_檢視匯出的文字檔案
參考資料:
使用指令碼擴充封裝
http://msdn.microsoft.com/zh-tw/library/ms345171.aspx
連接至指令碼工作中的資料來源
http://msdn.microsoft.com/zh-tw/library/ms136018.aspx
開發特定類型的指令碼元件
http://msdn.microsoft.com/zh-tw/library/ms345170.aspx
以指令碼元件建立來源
http://msdn.microsoft.com/zh-tw/library/ms136060.aspx
使用指令碼元件建立同步轉換
http://msdn.microsoft.com/zh-tw/library/ms136114.aspx
使用指令碼元件建立非同步轉換
http://msdn.microsoft.com/zh-tw/library/ms136133.aspx
沒有留言:
張貼留言