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









沒有留言:
張貼留言