[腳本] 工作可在 Integration Services 設計工具的 [控制流程] 視窗中取得,而 [數據流] 視窗中提供的腳本元件在 Integration Services 套件中具有非常不同的用途。 工作是一般用途的控制流程工具,而元件則做為數據流中的來源、轉換或目的地。 不過,儘管其用途不同,但腳本工作和腳本元件在程式代碼撰寫工具中具有一些相似之處,而且它們提供給開發人員使用的套件中物件。 瞭解其相似性和差異,可協助您更有效地使用工作和元件。
腳本工作與腳本元件之間的相似性
腳本工作和腳本元件會共用下列常見功能。
| 特徵 / 功能 | 說明 |
|---|---|
| 兩種設計時間模式 | 在工作和元件中,您會從在編輯器中指定屬性開始,然後切換至開發環境以撰寫程序代碼。 |
| Microsoft Visual Studio Tools for Applications (VSTA) | 工作和元件都使用相同的 VSTA IDE,並支援 Microsoft在 Visual Basic 或 Microsoft Visual C# 中撰寫的程式代碼。 |
| 先行編譯的腳本 | 從 SQL Server 2008 Integration Services (SSIS) 開始,所有腳本都會先行編譯。 在舊版中,您可以指定是否先行編譯腳本。 腳本會先行編譯成二進位程序代碼,以加快執行速度,但代價是增加套件大小。 |
| 偵錯 / 除錯 | 工作和元件都支援斷點,並在設計環境中偵錯時逐步執行程序代碼。 如需詳細資訊,請參閱編寫 和偵錯腳本工作 和 [編寫腳本元件程式代碼和偵錯](.。/extending-packages-scripting/data-flow-script-component/coding-and-debug-the-script-component.md。 |
腳本工作與腳本元件之間的差異
腳本工作和腳本元件具有下列值得注意的差異。
| 特徵 / 功能 | 腳本任務 | 腳本元件 |
|---|---|---|
| 控制流程/數據流 | 腳本工作是在設計工具的 [控制流程] 索引標籤上設定,並在封裝的數據流外執行。 | 腳本元件是在設計工具的 [數據流] 頁面上設定,並代表數據流工作中的來源、轉換或目的地。 |
| 目標 | 腳本工作幾乎可以完成任何一般用途的工作。 | 您必須指定是否要使用文稿元件建立來源、轉換或目的地。 |
| 執行 | 腳本工作會在封裝工作流程中的某個時間點執行自定義程序代碼。 除非您將它放在迴圈容器或事件處理程式中,否則它只會執行一次。 | 腳本元件也會執行一次,但通常會針對數據流中的每個數據列執行其主要處理例程一次。 |
| 編輯器 |
腳本工作編輯器有三個頁面:一般、腳本和表達式。
ReadOnlyVariables只有和 ReadWriteVariables和 ScriptLanguage 屬性會直接影響您可以撰寫的程式代碼。 |
文稿轉換編輯器最多有四個頁面:輸入數據行、輸入和輸出、腳本和連接管理器。 您在每一個頁面上設定的元數據和屬性會決定自動產生的基類成員,以供編碼使用。 |
| 與套件互動 | 在針對腳本工作撰寫的程式代碼中,您會使用 Dts 屬性來存取封裝的其他功能。 屬性 Dts 是 類別的成員 ScriptMain 。 |
在腳本元件程式代碼中,您可以使用具類型的存取子屬性來存取某些套件功能,例如變數和連接管理員。 方法 PreExecute 只能存取唯讀變數。 方法 PostExecute 可以存取唯讀和讀取/寫入變數。如需這些方法的詳細資訊,請參閱 [編寫程式代碼和偵錯腳本元件](.。/extending-packages-scripting/data-flow-script-component/coding-and-debug-the-script-component.md。 |
| 使用變數 | 腳本工作會使用 Variables 物件的 屬性Dts來存取可透過工作 和 ReadWriteVariables 屬性取得的ReadOnlyVariables變數。 例如:[VB] Dim myVar as String myVar = Dts.Variables("MyStringVariable").Value.ToString[C#] string myVar; myVar = Dts.Variables["MyStringVariable"].Value.ToString(); |
腳本元件會使用從元件的 和 ReadWriteVariables 屬性建立之自動產生型別類別的ReadOnlyVariables具型別存取子屬性。 例如: [VB] Dim myVar as String myVar = Me.Variables.MyStringVariable[C#] string myVar; myVar = this.Variables.MyStringVariable; |
| 使用連線 | 腳本工作會使用 Connections 物件的 屬性 Dts 來存取封裝中定義的連接管理員。 例如:[VB] Dim myFlatFileConnection As String myFlatFileConnection = _ DirectCast(Dts.Connections("Test Flat File Connection").AcquireConnection(Dts.Transaction), _ String)[C#] string myFlatFileConnection; myFlatFileConnection = (Dts.Connections["Test Flat File Connection"].AcquireConnection(Dts.Transaction) as String); |
腳本元件會使用自動產生基類的具型別存取子屬性,此屬性是從編輯器的 [連接管理器] 頁面上使用者輸入的連接管理員清單所建立。 例如: [VB] Dim connMgr As IDTSConnectionManager100 connMgr = Me.Connections.MyADONETConnection[C#] IDTSConnectionManager100 connMgr; connMgr = this.Connections.MyADONETConnection; |
| 引發事件 | 腳本工作會使用 Events 物件的 屬性 Dts 來引發事件。 例如:[VB] Dts.Events.FireError(0, "Event Snippet", _ ex.Message & ControlChars.CrLf & ex.StackTrace, _ "", 0)[C#] Dts.Events.FireError(0, "Event Snippet", ex.Message + "\r" + ex.StackTrace, "", 0); |
腳本元件會使用 屬性所ComponentMetaData傳回之介面的方法IDTSComponentMetaData100,引發錯誤、警告和參考訊息。 例如: [VB] Dim myMetadata as IDTSComponentMetaData100 myMetaData = Me.ComponentMetaData myMetaData.FireError(...) |
| 森林伐木業 | 腳本工作會使用 Log 物件的 方法 Dts ,將資訊記錄到啟用的記錄提供者。 例如:[VB] Dim bt(0) As Byte Dts.Log("Test Log Event", _ 0, _ bt)[C#] byte[] bt = new byte[0]; Dts.Log("Test Log Event", 0, bt); |
腳本元件會使用 Log 自動產生的基類 方法,將資訊記錄到啟用的記錄提供者。 例如: [VB] Dim bt(0) As ByteMe.Log("Test Log Event", _0, _bt)[C#] byte[] bt = new byte[0]; this.Log("Test Log Event", 0, bt); |
| 返回結果 | 腳本工作會同時使用 TaskResult 對象的 屬性和選擇性 ExecutionValue 屬性 Dts ,通知運行時間其結果。 |
腳本元件會以數據流工作的一部分執行,而且不會使用這些屬性之一來報告結果。 |
另請參閱
使用腳本工作擴充封裝
使用腳本元件擴充數據流
在 SQL Server Integration Services SSIS 中使用腳本工作連線至 Web 服務