指令碼工作

適用於:SQL ServerAzure Data Factory 中的 SSIS Integration Runtime

指令碼工作提供程式碼,用來執行無法在 SQL Server Integration Services 提供的內建工作和轉換中使用的函式。 指令碼工作亦可在一個指令碼中結合函數,而不使用多項工作和轉換。 您可以使用指令碼工作處理必須在封裝中執行一次 (或是每個列舉物件一次) 的工作,而非每個資料列執行一次的工作。

您可將指令碼工作用於下列用途:

  • 使用其他不受內建連接類型支援的技術存取資料。 例如,指令碼可使用「Active Directory 服務介面」(ADSI) 存取並擷取 Active Directory 中的使用者名稱。

  • 建立封裝專屬的效能計數器。 例如,指令碼可建立效能計數器,並於複雜或效能不佳的工作執行時進行更新。

  • 識別指定的檔案是否空白或其中包含多少資料列,然後根據這項資訊,判斷其是否會影響封裝中的控制流程。 例如,如果檔案包含零個資料列,變數值便會設為 0,而評估該值的優先順序條件約束則會讓「檔案系統」工作無法複製檔案。

如果您必須使用指令碼在集合的每一列資料上執行相同的工作,您應該使用指令碼元件,而非指令碼工作。 例如,如果要評估合理的郵資金額,並略過金額過高或過低的資料列,請使用「指令碼」元件。 如需詳細資訊,請參閱 指令碼元件

如果有多個封裝使用指令碼,請考慮撰寫自訂工作,而不要使用指令碼工作。 如需詳細資訊,請參閱 開發自訂工作

確定指令碼工作是適用於您封裝的選擇之後,您必須同時開發該工作使用的指令碼,以及設定工作本身。

撰寫並執行工作使用的指令碼

指令碼工作使用 Microsoft Visual Studio Tools for Applications (VSTA) 作為撰寫指令碼的環境,以及執行那些指令碼的引擎。

VSTA 提供 Visual Studio 環境的所有標準功能,例如色彩編碼的 Visual Studio 編輯器、IntelliSense 和 [物件總管]。 VSTA 也使用其他 Microsoft 開發工具使用的相同偵錯工具。 指令碼中的中斷點能與 Integration Services 工作和容器上的中斷點合作無間。 VSTA 支援 Microsoft Visual Basic 與 Microsoft Visual C# 程式設計語言。

若要執行指令碼,必須在封裝執行的電腦上安裝 VSTA。 當封裝執行時,工作會載入指令碼引擎並執行指令碼。 您可以在專案中將參考加入至組件,藉此在指令碼中存取外部 .NET 組件。 目前不支援 .NET Core 和 .NET Standard 元件參考。

注意

不像在舊版中可以指出是否已經預先編譯指令碼,所有指令碼在 SQL Server 2008 Integration Services (SSIS) 與更新版本中都會預先編譯。 指令碼經過先行編譯後,在執行階段不會載入語言引擎,因此封裝的執行速度會更快。 不過,先行編譯的二進位檔案會使用大量的磁碟空間。

設定指令碼工作

您可以利用下列方式設定指令碼工作:

  • 提供工作執行的自訂指令碼。

  • 在 VSTA 專案中,將 Integration Services 執行階段呼叫的方法指定為指令碼工作程式碼的進入點。

  • 指定指令碼語言。

  • 選擇性地提供於指令碼中使用的唯讀和讀/寫變數清單。

您可以透過 SSIS 設計師或以程式設計方式來設定這些屬性。

在設計師中設定指令碼工作

下表描述可以針對指令碼工作所記錄的 ScriptTaskLogEntry 事件。 系統會在 [設定 SSIS 記錄] 對話方塊的 [詳細資料] 索引標籤上,選取要記錄的 ScriptTaskLogEntry 事件。 如需詳細資訊,請參閱 Integration Services (SSIS) 記錄

記錄項目 描述
ScriptTaskLogEntry 報告在指令碼內實作記錄的結果。 每次呼叫 Dts 物件的 Log 方法時,工作都會寫入記錄項目。 工作會在程式碼執行時撰寫這些項目。 如需詳細資訊,請參閱 Logging in the Script Task

如需有關可在 SSIS 設計師中設定之屬性的詳細資訊,請參閱下列主題:

如需有關如何在 SSIS 設計師中設定這些屬性的詳細資訊,請參閱下列主題:

以程式設計的方式設定指令碼工作

如需有關以程式設計方式設定這些屬性的詳細資訊,請參閱以下主題:

指令碼工作編輯器 (一般頁面)

使用 [指令碼工作編輯器] 對話方塊的 [一般] 頁面,即可命名和描述指令碼工作。

若要深入了解指令碼工作,請參閱< Script Task >和< 在指令碼工作編輯器設定指令碼工作>。 若要了解如何以程式設計方式編寫指令碼工作,請參閱< Extending the Package with the Script Task>。

選項。

名稱
為指令碼工作提供唯一的名稱。 這個名稱是作為工作圖示中的標籤使用。

注意

工作名稱在封裝內必須是唯一的。

說明
輸入指令碼工作的描述。

指令碼工作編輯器 (指令碼頁面)

使用 [指令碼工作編輯器] 對話方塊的 [指令碼] 頁面,即可設定指令碼屬性以及指定指令碼可存取的變數。

注意

在 SQL Server 2008 Integration Services (SSIS) 與更新版本中,所有指令碼都會預先編譯。 在舊版中,您會設定 [PrecompileScriptIntoBinaryCode] 屬性來指定指令碼已先行編譯。

若要深入了解指令碼工作,請參閱< Script Task >和< 在指令碼工作編輯器設定指令碼工作>。 若要了解如何以程式設計方式編寫指令碼工作,請參閱< Extending the Package with the Script Task>。

選項。

ScriptLanguage
為此工作選取指令碼語言,您可以選取 Microsoft Visual Basic 或 Microsoft Visual C#。

當您為此工作建立指令碼之後,就無法變更 [ScriptLanguage] 屬性的值。

若要為指令碼工作設定預設指令碼語言,請使用 [選項] 對話方塊上 [一般] 頁面上的 [指令碼語言] 選項。 如需相關資訊,請參閱 General Page

EntryPoint
將 Integration Services 執行階段呼叫的方法指定為指令碼工作程式碼的進入點。 指定的方法必須位於 Microsoft Visual Studio Tools for Applications (VSTA) 專案的 ScriptMain 類別內。ScriptMain 類別是指令碼範本所產生的預設類別。

如果您在 VSTA 專案內變更此方法的名稱,您就必須變更 [EntryPoint] 屬性的值。

ReadOnlyVariables
鍵入以逗號分隔且指令碼可以使用的唯讀變數清單,或是按一下省略符號 (...) 按鈕,並在 [選取變數] 對話方塊中選取變數。

注意

變數名稱會區分大小寫。

ReadWriteVariables
鍵入以逗號分隔且指令碼可以使用的可讀寫變數清單,或是按一下省略符號 (...) 按鈕,並在 [選取變數] 對話方塊中選取變數。

注意

變數名稱會區分大小寫。

編輯指令碼
開啟 VSTA IDE,您可在此建立或修改指令碼。