比較指令碼工作和指令碼元件
在 Integration Services 設計工具中的 [控制流程] 視窗中所提供的指令碼工作,以及在 [資料流程] 視窗中所提供的指令碼元件,在 Integration Services 封裝中有非常不一樣的目的。該工作是一般目的之控制流程工具,而該元件則是做為資料流程中的來源、轉換或是目的地。不過,儘管其目的不同,指令碼工作與指令碼元件在所使用的程式碼編寫工具以及提供給開發人員的封裝中之物件方面,有一些相似之處。了解其相似性與差異性可協助您更有效率地使用工作與元件。
指令碼工作和指令碼元件之間的相似性
指令碼工作和指令碼元件都有下列常用的功能。
功能 |
說明 |
---|---|
兩種設計階段模式 |
在工作與元件中,您可以從在編輯器中指定屬性開始,然後再切換到開發環境以撰寫程式碼。 |
MicrosoftVisual Studio Tools for Applications (VSTA) |
工作與元件都使用相同的 VSTA IDE,並支援以 MicrosoftVisual Basic 2008 或 MicrosoftVisual C# 2008 撰寫的程式碼。 |
先行編譯的指令碼 |
在 SQL Server 2008 Integration Services (SSIS) 中,所有指令碼都是先行編譯。在舊版中,可以指定是否已經先行編譯指令碼。 指令碼已先行編譯成二進位碼,允許更快速的執行,但是會增加封裝大小的成本。 |
指令碼工作和指令碼元件之間的差異性
指令碼工作和指令碼元件具有下列顯著的差異。
功能 |
指令碼工作 |
指令碼元件 |
---|---|---|
控制流程 / 資料流程 |
指令碼工作是在設計工具的 [控制流程] 索引標籤上設定,並在封裝的資料流程之外執行。 |
指令碼元件是在設計工具的 [資料流程] 頁面上設定,並代表資料流程工作中的來源、轉換或是目的地。 |
目的 |
指令碼工作幾乎可以完成任何一般目的之工作。 |
您必須指定是否要以指令碼元件建立來源、轉換或是目的地。 |
執行 |
指令碼工作會在封裝工作流程中的某個點執行自訂程式碼。除非您將它放在迴圈容器或是事件處理常式中,否則它只會執行一次。 |
指令碼元件也只會執行一次,但是它通常會為資料流程中的每個資料列,執行一次其主要的處理常式。 |
編輯器 |
[指令碼工作編輯器] 有三個頁面:[一般]、[指令碼] 和 [運算式]。只有 ReadOnlyVariables、ReadWriteVariables 和 ScriptLanguage 屬性會直接影響您可以撰寫的程式碼。 |
[指令碼轉換編輯器] 最多可達四頁:[輸入資料行]、[輸入及輸出]、[指令碼] 和 [連接管理員]。在這些頁面上設定的中繼資料與屬性,會決定自動產生的基底類別成員,以供您在撰寫程式碼時使用。 |
與封裝之間的互動 |
在針對指令碼工作所撰寫的程式碼中,使用 Dts 屬性以存取封裝的其他功能。Dts 屬性是 ScriptMain 類別的成員。 |
在指令碼元件程式碼中,您使用具有類型的存取子屬性,存取如變數與連接管理員等某些封裝功能。 PreExecute 方法只能存取唯讀變數。PostExecute 方法可以存取唯讀和讀/寫變數。 如需有關這些方法的詳細資訊,請參閱<指令碼元件的程式碼撰寫和偵錯>。 |
使用變數 |
指令碼工作使用 Dts 物件的 Variables 屬性,以存取透過工作的 ReadOnlyVariables 與 ReadWriteVariables 屬性所提供的變數。例如: |
指令碼元件使用自動產生的基底類別之具有類型的存取子屬性,從元件的 ReadOnlyVariables 與 ReadWriteVariables 屬性中建立。例如: |
使用連接 |
指令碼工作使用 Dts 物件的 Connections 屬性,存取在封裝中定義的連接管理員。例如: |
指令碼元件使用自動產生的基底類別之具有類型的存取子屬性,從編輯器的 [連接管理員] 頁面上之使用者所輸入的連接管理員清單中建立。例如: |
引發事件 |
指令碼工作使用 Dts 物件的 Events 屬性引發事件。例如: |
指令碼元件會透過使用 ComponentMetaData 屬性傳回的 IDTSComponentMetaData100 介面,引發錯誤、警告和參考用訊息。例如: |
記錄 |
指令碼工作使用 Dts 物件的 Log 方法,來將資訊記錄到啟用的記錄提供者。例如: |
指令碼元件會使用自動產生之基底類別的 Log 方法,將資訊記錄到啟用的記錄提供者。例如: [Visual Basic] Dim bt(0) As Byte Me.Log("Test Log Event", _ 0, _ bt) |
傳回結果 |
指令碼工作會同時使用 Dts 物件的 TaskResult 屬性及選擇性的 ExecutionValue 屬性,通知執行階段其結果。 |
指令碼元件以資料流程工作的一部分執行,而且不會使用這些屬性的任何一個來報告結果。 |
偵錯 |
指令碼工作在設計環境中偵錯時,透過程式碼支援中斷點與逐步執行。 ![]()
當您為包含多個指令碼工作的封裝偵錯時,偵錯工具只會在一個指令碼工作中叫用中斷點,而且將會忽略其他指令碼工作中的中斷點。如果指令碼工作是 [Foreach 迴圈] 或 [For 迴圈] 容器的一部分,偵錯工具會在迴圈的第一次反覆運算後,忽略指令碼工作中的中斷點。
|
指令碼元件不支援偵錯。如需詳細資訊,請參閱在<指令碼元件的程式碼撰寫和偵錯>中的<偵錯指令碼元件>。 |
|